RecyclerVIew没有自带的点击事件,需要我们自己用接口回调,初学者不好理解接口回调,这里记录一下:
点击事件接口
public interface OnItemClickListener { void onItemClick(int position); }
activity中调用adapter的setItemClickListener方法,直接new一个接口实例,并重写onItemClick方法
adapter.setItemClickListener(new OnItemClickListener() { @Override public void onItemClick(int position) { Toast.makeText(MainActivity.this,bigSortList.get(position),Toast.LENGTH_SHORT).show(); } });
adapter中自定义一个setItemClickListener,将listener传入adapter中,然后adapter传入ViewHolder的构造方法中
public void setItemClickListener(OnItemClickListener listener) { this.listener = listener; }
ViewHolder中的Item点击事件获取position,然后传到listener.onItemClick方法中,该方法在activity中被重写
public static class ViewHolder extends RecyclerView.ViewHolder { private TextView tvName; public ViewHolder(View itemView, final LeftListener listener) { super(itemView); tvName = (TextView) itemView.findViewById(R.id.tv_left); //item被点击会调用自定义listener的方法,该方法在activity中被重写 itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { listener.onItemClick(getAdapterPosition()); } }); } }
可能看的有点费劲,没事,我们从下往上看:
首先ViewHolder中的item被设置了点击事件,它被点击可以通过getAdapterPosition()获取当前被点击的位置,然后这个位置被当做参数传到了listener的onItemClick方法中,listener是adapter中进行new ViewHolder()操作的时候传进来的,再往上一步,是从adapter的setItemClickListener中传过来的,传过来的正好是activity中重写的onItemClick方法。
其实就是ViewHolder中的点击方法,直接调用了activity中重写的方法,中间经过好几次传递而已。
哈哈,说的感觉好啰嗦,不喜勿喷,写出来就是给初学者看的,希望大家可以快速的理解。
总结
不是什么多难的问题,但是还是想记下来,给初学的人一些理解的建议,一起共勉!