RecyclerView的使用(三)——点击事件
一、创建自定义接口
public interface MyItemClickListener {
public void onItemClick(View view, int postion);
}
二、在Adpater的static class ViewHolder中
1 implements View.OnClickListener接口
2 viewHodler构造方法中,加上接口类 传入自定义的接口对象
2 重写View.OnClickListener的onClick点击监听方法
3 在onClick点击监听方法中,用创建ViewHolder时传递过来的自定义接口的对象去调用自定义接口的方法 传入View和Position
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView myTitle;
private MyItemClickListener mListener;
public ViewHolder(View itemView,MyItemClickListener listener) {
super(itemView);
// 获取组件
myTitle = itemView.findViewById(R.id.text_1);
this.mListener = listener;
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(mListener != null){
mListener.onItemClick(v,getPosition());
}
}
}
三、在Adapter的onCreateViewHolder方法中,实例化viewholder时,传入建立的MyItemClickListener对象
private MyItemClickListener mItemClickListener;
//onCreateViewHolder中
// 实例化viewholder
ViewHolder viewHolder = new ViewHolder(v,mItemClickListener);
四、在Adpater类中 自定义一个方法 参数为MyItemClickListener对象 为了后面给Activity调用
public void setOnItemClickListener(MyItemClickListener listener){
this.mItemClickListener = listener;
}
五、在Activity中
Activity类要implements MyItemClickListener
initData中:
就可以调用Adpater的setOnItemClickListener方法
this.mAdapter.setOnItemClickListener(this);
并且adpater的类型要为 自定义的Adapter的类型
private CRMListAdapter mAdapter;
而不是
private RecyclerView.Adapter mAdapter;
的类型
六、在Activity就可以实现具体的点击事件了
这里实现的是将position的值传给另一个界面
@Override
public void onItemClick(View view, int position) {
String thisPosition=String.valueOf(position);
Intent intent = new Intent(MainActivity.this,ShowActivity.class);
intent.putExtra("position", thisPosition);
Log.i("thisPosition",thisPosition);
startActivity(intent);
}
大致思路:
先自定义点击接口,然后在Activity中,将ItemClickListener对象传给Adapter类,Adapter类在实例化ViewHolder时,传入ItemClickListener对象,然后View.OnClickListener作为ViewHolder的接口,为每个item设置单独的OnClick监听并调用接口的方法,在Activity中写接口的具体方法实现。
进阶:
一、若只有一个Adapter一个/多个 recyclerView,但是不同情况的Item界面和内容是不同的,并且点击事件的效果也不同。怎么设置点击效果
参考博客:
http://blog.csdn.net/guxiao1201/article/details/40423361