RecyclerView的点击事件

实现recyclerView的子项点击事件

第一种方法:我们可以这么做。在Adapter中,因为
内部类ViewHolder是调用父类中的构造函数super(itemView),这个itemView就是当前子项布局,可以直接在其中以itemView.setOnclickListener设置点击事件;
当然也可以在其中先找到子项布局中的各个控件,分别设置点击事件。如:

public class StandTypeHolder extends RecyclerView.ViewHolder{
        private ImageView mPic;
        private TextView mTitle;

        public StandTypeHolder(@NonNull final View itemView) {
            super(itemView);
            mPic = itemView.findViewById(R.id.icon);
            mTitle = itemView.findViewById(R.id.title);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(itemView.getContext(),"点击了布局",Toast.LENGTH_SHORT).show();
                }
            });
            mPic.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(itemView.getContext(),"点击了图片",Toast.LENGTH_SHORT).show();
                }
            });
            mTitle.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(itemView.getContext(),"点击了标题",Toast.LENGTH_SHORT).show();
                }
            });
        }

第二种:
在Adapter中设置接口,暴露给外部调用,由外部实现具体点击事件

	  //设置接口的方法
    public void setOnItemClickListener(OnItemClickListener listener) {
        this.mOnItemClickListener = listener;
    }

    /**
     * 编写回调的步骤
     * 1.创建这个接口
     * 2.定义接口内部方法
     * 3.提供设置接口方法给外部
     * 4.接口的调用
     */
    public interface OnItemClickListener{
        void onItemClick(int position);
    }
	/**
	*在ViewHolder中当子项布局被点击,由外部执行具体的点击事件
	*即实现接口中的方法
	*/
     public class ViewHolder extends RecyclerView.ViewHolder {
        private ImageView mIcon;
        private TextView mTitle;
        private int mPosition;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            mIcon = itemView.findViewById(R.id.icon);
            mTitle = itemView.findViewById(R.id.title);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(mOnItemClickListener!=null){
                    //当传入的mOnItemClickListener不为空就执行其中的方法
                      mOnItemClickListener.onItemClick(mPosition);
                    }
                }
            });
        }
    }
    ```
   外部调用

mAdapter.setOnItemClickListener(new RecyclerViewBaseAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
Toast.makeText(MainActivity.this, “你点击了第” + position + “张图片”, Toast.LENGTH_SHORT).show();
}
});


  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值