分为短按事件和长按事件
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 abstract class BaseRecyclerViewAdapter<T, VH extends BaseRecyclerViewAdapter.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);
}
@Override
public int getItemCount() {
return mList.size();
}
/** * 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);
}
/** * a final function to avoid you override * use template design pattern * * @param vh * @param position */
@Override
public final void onBindViewHolder(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 */
protected abstract void bindDataToItemView(VH vh, T item);
/** * bind click listner to itemview * * @param vh viewholder * @param item item */
protected final void bindItemViewClickListener(VH vh, final T item) {
if (mOnItemClickListener != null) {
vh.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mOnItemClickListener.onClick(view, item);
}
});
}
if (mOnItemLongClickListener != null) {
vh.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mOnItemLongClickListener.onLongClick(v, item);
return true;
}
});
}
}
public static class SparseArrayViewHolder extends RecyclerView.ViewHolder {
private final 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;
}
}
内部实现了一个泛型的getView方法,其作用就是将View缓存至SparseArray中去
public SparseArrayViewHolder setText(int viewId, String value) {
TextView view = getView(viewId);
view.setText(value);
return SparseArrayViewHolder.this;
}
public SparseArrayViewHolder setTextColor(int viewId, int textColor) {
TextView view = getView(viewId);
view.setTextColor(textColor);
return SparseArrayViewHolder.this;
}
public SparseArrayViewHolder setImageResource(int viewId, int imageResId) {
ImageView view = getView(viewId);
view.setImageResource(imageResId);
return SparseArrayViewHolder.this;
}
public SparseArrayViewHolder setBackgroundColor(int viewId, int color) {
View view = getView(viewId);
view.setBackgroundColor(color);
return SparseArrayViewHolder.this;
}
public SparseArrayViewHolder setBackgroundResource(int viewId, int backgroundRes) {
View view = getView(viewId);
view.setBackgroundResource(backgroundRes);
return SparseArrayViewHolder.this;
}
public SparseArrayViewHolder setVisible(int viewId, boolean visible) {
View view = getView(viewId);
view.setVisibility(visible ? View.VISIBLE : View.GONE);
return SparseArrayViewHolder.this;
}
public SparseArrayViewHolder setOnClickListener(int viewId, View.OnClickListener listener) {
View view = getView(viewId);
view.setOnClickListener(listener);
return SparseArrayViewHolder.this;
}
public SparseArrayViewHolder setOnTouchListener(int viewId, View.OnTouchListener listener) {
View view = getView(viewId);
view.setOnTouchListener(listener);
return SparseArrayViewHolder.this;
}
public SparseArrayViewHolder setOnLongClickListener(int viewId, View.OnLongClickListener listener) {
View view = getView(viewId);
view.setOnLongClickListener(listener);
return SparseArrayViewHolder.this;
}
public SparseArrayViewHolder setTag(int viewId, Object tag) {
View view = getView(viewId);
view.setTag(tag);
return SparseArrayViewHolder.this;
}