RecyclerView通用适配器的实现

分析编写监听器

分为短按事件和长按事件

短按监听器package cn.edu.zafu.base.adapter.listener;import android.view.View;/** * Created by lizhangqu on 2015/6/3. */public interface OnItemClickListener<T> {void onClick(View view, T item);}长按监听器package cn.edu.zafu.base.adapter.listener;import android.view.View;/** * Created by lizhangqu on 2015/6/3. */public interface OnItemLongClickListener<T> {void onLongClick(View view, T item);}编写通用适配器设置监听器package cn.edu.zafu.base.adapter;import android.support.v7.widget.RecyclerView;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import java.util.List;import cn.edu.zafu.base.adapter.listener.OnItemClickListener;import cn.edu.zafu.base.adapter.listener.OnItemLongClickListener;/** * this is a BaseAdapter for RecyclerView * author lizhangqu * version 1.0 * date 2015/6/3. */public <.SparseArrayViewHolder> extends RecyclerView.Adapter<VH> {/*** click listener*/protected OnItemClickListener mOnItemClickListener;/*** long click listener*/protected OnItemLongClickListener mOnItemLongClickListener;/*** set a long click listener** @param onItemLongClickListener*/public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {mOnItemLongClickListener = onItemLongClickListener;}/*** set a click listener** @param onItemClickListener*/public void setOnItemClickListener(OnItemClickListener onItemClickListener) {mOnItemClickListener = onItemClickListener;}}编写构造方法,将数据集合进行赋值 /*** data*/protected List<T> mList;/*** @param list the datas to attach the adapter*/public BaseRecyclerViewAdapter(List<T> list) {mList = list;}

实现几个必要的方法,,比如获得Item以及覆写getItemCount方法

/** * get a item by index * * @param position * @return */protected T getItem(int position) {return mList.get(position);}() {return mList.size();}实现将布局文件映射成View的方法 /*** inflate a view by viewgroup ,id ,etc** @param viewGroup* @param layoutId* @return*/protected View inflateItemView(ViewGroup viewGroup, int layoutId) {return inflateItemView(viewGroup, layoutId, false);}/*** inflate a view by viewgroup ,id ,etc** @param viewGroup* @param layoutId* @param attach* @return*/protected View inflateItemView(ViewGroup viewGroup, int layoutId, boolean attach) {return LayoutInflater.from(viewGroup.getContext()).inflate(layoutId, viewGroup, attach);}实现onBindViewHolder方法,这一步很重要,将具体实现抽取到两个方法中去实现,bindDataToItemView是一个抽象方法,延迟到子类实现,bindItemViewClickListener方法设置监听器 /*** a final function to avoid you override* use template design pattern** @param vh* @param position*/(VH vh, int position) {final T item = getItem(position);bindDataToItemView(vh, item);bindItemViewClickListener(vh, item);}/*** bind data to itemview** @param vh viewholder* @param item item*/(VH vh, T item);/*** bind click listner to itemview** @param vh viewholder* @param item item*/(VH vh, final T item) {if (mOnItemClickListener != null) {vh.itemView.setOnClickListener(new View.OnClickListener() {(View view) {mOnItemClickListener.onClick(view, item);}});}if (mOnItemLongClickListener != null) {vh.itemView.setOnLongClickListener(new View.OnLongClickListener() {(View v) {mOnItemLongClickListener.onLongClick(v, item);return true;}});}}实现通用ViewHolder,内部使用SparseArray维持View对象 .SparseArray<View> views;public SparseArrayViewHolder(View itemView) {super(itemView);views = new SparseArray<View>();}public <T extends View> T getView(int id) {View view = views.get(id);if (view == null) {view = itemView.findViewById(id);views.put(id, view);}return (T) view;}}没有什么可留恋,只有抑制不住的梦想,没有什么可凭仗,

RecyclerView通用适配器的实现

相关文章:

你感兴趣的文章:

标签云: