BaseAdapter封装

package -.adapter;--

import android.content.Context;
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 java.util.List;

/**

 * ---------------------------
 * <p>的基类
 */

public abstract class BaseBindingAdapter<T, H extends ViewDataBinding> extends RecyclerView.Adapter<BaseBindingAdapter.BindingViewHolder> {
    protected Context context;
    protected LayoutInflater mInflater;
    protected List<T> mDatas;

    public BaseBindingAdapter(Context context, List<T> datas) {
        this.context = context;
        this.mDatas = datas;
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public BindingViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        H binding = DataBindingUtil.inflate(mInflater,
                getViewHolderLayoutId(), parent, false);
        return new BindingViewHolder(binding);
    }

    @Override
    public void onBindViewHolder(BaseBindingAdapter.BindingViewHolder holder, int position) {
        T itemInfo = mDatas.get(position);
        H binding = (H) holder.getBinding();
        onBindMyViewHolder(holder, position, itemInfo, binding);
        holder.getBinding().executePendingBindings();               //解决闪烁问题
    }

    @Override
    public int getItemCount() {
        return mDatas == null ? 0 : mDatas.size();
    }

    /**
     * 获取 viewItem的 layoutId
     *
     * @return
     */
    protected abstract int getViewHolderLayoutId();



    /**
     * @param holder
     * @param position
     * @param itemInfo
     * @param binding
     */
    protected abstract void onBindMyViewHolder(BindingViewHolder holder, int position, T itemInfo, H binding);

    public class BindingViewHolder extends RecyclerView.ViewHolder {
        private ViewDataBinding binding;

        public BindingViewHolder(ViewDataBinding binding) {
            super(binding.getRoot());
            this.binding = binding;
        }

        public ViewDataBinding getBinding() {
            return binding;
        }
    }
}

猜你喜欢

转载自my.oschina.net/u/1268043/blog/1616002