RecyclerView的点击事件的理解

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中重写的方法,中间经过好几次传递而已。

哈哈,说的感觉好啰嗦,不喜勿喷,写出来就是给初学者看的,希望大家可以快速的理解。

总结

不是什么多难的问题,但是还是想记下来,给初学的人一些理解的建议,一起共勉!


猜你喜欢

转载自blog.csdn.net/pengbo6665631/article/details/80411864
今日推荐