思路
思路是这样的,给Adapter中设置OnLickListener,然后创建ViewHolder时传入ViewHolder,在ViewHolder中将itemView的点击事件传入OnClickListener。
自定义两个Listener
一个OnItemCLickListener一个onItemLongClickListener
public interface MyItemClickListener {
public void onItemClick(View view, int position);
}
public interface MyItemLongClickListener {
public void onItemLongClick(View view,int position);
}
ViewHolder设置
ViewHolder中保存两个Listener,Listener从Adapter中在ViewHolder的构造函数中传入。
class MyViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener, View.OnClickListener {
private MyItemClickListener mOnClickListener;
private MyItemLongClickListener mOnLongClickListener;
public MyViewHolder(View itemView,MyItemClickListener onItemClickListener,MyItemLongClickListener onItemLongClickListener) {
super(itemView);
//findViewById等语句省略,自行添加
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
this.mOnClickListener = onItemClickListener;
this.mOnLongClickListener = onItemLongClickListener;
}
@Override
public boolean onLongClick(View v) {
if (mOnLongClickListener != null){
mOnLongClickListener.onItemLongClick(itemView,getPosition());
}
return true;
}
@Override
public void onClick(View v) {
if (mOnClickListener != null){
mOnClickListener.onItemClick(itemView,getPosition());
}
}
}
Adapter设置
Adapter中也通过构造函数传入Listener
private MyItemClickListener mItemClickListener;
private MyItemLongClickListener mItemLongClickListener;
public MyAdapter(Context context,List<Pet> pets,MyItemClickListener clickListener,MyItemLongClickListener longClickListener){
this.context = context;
this.inflater = LayoutInflater.from(context);
this.pets = pets;
this.mItemClickListener = clickListener;
this.mItemLongClickListener = longClickListener;
}
在OnCreateViewHolder中将两个Listener传入ViewHolder
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.your_item_view_layout,parent,false);
MyViewHolder holder = new MyViewHolder(view,mItemClickListener,mItemLongClickListener);
}
return holder;
}
使用RecyclerView时初始化Adapter
MyAdapter mAdapter = new MyAdapter(getContext(),datas,
new MyItemClickListener() {
@Override
public void onItemClick(View view, int position) {
//添加点击效果
}
},
new MyItemLongClickListener() {
@Override
public void onItemLongClick(View view, int position) {
//添加长按效果
}
}
);
MyRecyclerView.setAdapter(mAdapter);