package com.mcxtzhang.commonadapter.databinding.viewgroup; import android.content.Context; import android.databinding.DataBindingUtil; import android.databinding.ViewDataBinding; import android.util.Log; import android.view.View; import android.view.ViewGroup; import com.mcxtzhang.commonadapter.BR; import com.mcxtzhang.commonadapter.R; import com.mcxtzhang.commonadapter.viewgroup.adapter.cache.ViewHolder; import com.mcxtzhang.commonadapter.viewgroup.adapter.single.SingleAdapter; import java.util.List; /** * 介绍:用DataBinding实现的SingleAdapter * 作者:zhangxutong * 邮箱:mcxtzhang@163.com * 主页:http://blog.csdn.net/zxt0601 * 时间: 16/12/13. */ public class SingleBindingAdapter<D, B extends ViewDataBinding> extends SingleAdapter<D> { //用于设置Item的事件Presenter protected Object ItemPresenter; public Object getItemPresenter() { return ItemPresenter; } /** * 用于设置Item的事件Presenter * * @param itemPresenter * @return */ public SingleBindingAdapter setItemPresenter(Object itemPresenter) { ItemPresenter = itemPresenter; return this; } public SingleBindingAdapter(Context context, List<D> datas, int itemLayoutId) { super(context, datas, itemLayoutId); } /** * 不必关心从缓存取 还是inflate * * @param parent * @param layoutId * @return */ @Override public ViewHolder getViewHolderByType(ViewGroup parent, int layoutId) { ViewHolder holder = mViewCache.get(layoutId); if (holder == null) { Log.d("TAG", "创建"); ViewDataBinding binding = DataBindingUtil.inflate(mInflater, layoutId, parent, false); View itemView = binding.getRoot(); ViewHolder holder2 = new ViewHolder(itemView, layoutId); itemView.setTag(R.id.zxt_tag_vh, holder2); itemView.setTag(R.id.zxt_tag_vdb, binding); return holder2; } Log.d("TAG", "复用"); return holder; } //重写利用DataBinding做 @Override public View getView(ViewGroup parent, int pos, D data) { ViewHolder holder = getViewHolderByType(parent, mItemLayoutId); ViewDataBinding binding = (ViewDataBinding) holder.itemView.getTag(R.id.zxt_tag_vdb); onBindViewHolder(parent, holder, data, pos); binding.setVariable(BR.data, data); binding.setVariable(BR.itemP, ItemPresenter); return holder.itemView; } //空实现即可,因为DataBinding的实现都是在xml里做 @Override public void onBindViewHolder(ViewGroup parent, ViewHolder holder, D data, int pos) { } }