DataBindingRecyclerAdapter.java 1.64 KB
package com.cnlive.libs.demo;

import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.cnlive.libs.base.frame.ReflectUtil;

import java.util.List;


public abstract class DataBindingRecyclerAdapter<D, T extends ViewDataBinding> extends RecyclerView.Adapter<DataBindingRecyclerAdapter<D, T>.DataBindingViewHolder> {

    public abstract int getLayoutId();

    public abstract List<D> getList();

    @Override
    public DataBindingViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        T binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), getLayoutId(), parent, false);
        DataBindingViewHolder viewHolder = new DataBindingViewHolder(binding.getRoot());
        viewHolder.setBinding(binding);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(DataBindingViewHolder holder, int position) {
        ReflectUtil.invoke(holder.binding, "setData", getList().get(position));
        holder.binding.executePendingBindings();
    }

    @Override
    public int getItemCount() {
        return getList().size();
    }

    public class DataBindingViewHolder extends RecyclerView.ViewHolder {

        private ViewDataBinding binding;

        public DataBindingViewHolder(View itemView) {
            super(itemView);
        }

        public void setBinding(ViewDataBinding binding) {
            this.binding = binding;
        }

        public ViewDataBinding getBinding() {
            return binding;
        }

    }
}