Recyclerview中的点击事件记录

Q:如果要你给Recyclerview中展示的数据做一个查看详情页的点击事件该怎么做?

Q:如果列表中展示的数据包含的子布局也要做点击事件该怎么办?

Q:为什么使用listener的形式?

先来看第一个问题,如果只要做一个简单的点击事件,只要是点到那个item上就行了的话可以用很简单的方式实现。

1.在Adapter中定义一个接口

public interface OnRecyclerItemClickListener {
        void onItemClick(int position);
    }

2.在onBindViewHolder当中获取到position传进

xxx.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //有监听器的实例传入
                    if(onRecyclerItemClickListener!=null){
                        onRecyclerItemClickListener.onItemClick(position);
                    }
                }
            });

3.Adapter暴露接口给外部调用

    public void setOnRecyclerItemClickListener(OnRecyclerItemClickListener listener) {
        this.onRecyclerItemClickListener = listener;
    }

4.在Activity中使用

private void clicktheItem(){
        mAdapter.setOnRecyclerItemClickListener(new xxxxAdapter.OnRecyclerItemClickListener() {
            @Override
            public void onItemClick(int position) {
              
           //在这里实现你的逻辑,可以是toast,也可以是跳转到另外一个activity,或者是别的需求

            }
        });
    }

接下来是第二个问题,其实也很简单,在onBindViewHolder中再添加一个点击

在这个之前,我们现在接口当中再定义一个

void onChildrenClick(int position);

同样的方式实现一个

 ((NormalHolder) holder).你要监听点击的控件.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if(onRecyclerItemClickListener!=null){
                        onRecyclerItemClickListener.onChildrenClick(position);
                    }
                }
            });

然后点击逻辑

@Override
            public void onChildrenClick(int position) {
                Log.d("click","click the children---"+position);
                String name=mAdapter.getSource().get(position).getName();
                Toast.makeText(GamesActivity.this,name,Toast.LENGTH_SHORT).show();
            }
        });

第三点不建议使用implements方式实现点击监听的理由

可以百度一下看一下别人的匿名内部类的使用原因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值