给 RecyclerView 设置点击事件

写在前边

kotlin 代码实现请看这里
kotlin 代码实现请看这里
kotlin 代码实现请看这里

RecyclerView 的点击事件经常用到, 虽然代码很少, 但是每次都要手写就有点过意不去了(没别的就是懒), 于是乎, 将代码贴在这里方便每次复制粘贴, 改一改名称即可拿来用, 现在很多app都用上了kotlin, 如果想找kotlin的代码请点击上面的连接跳转;

如果不出意外, 每次更新的功能性代码都会附上kotlin的实现;

RecyclerView 设置点击事件的步骤

1.实现OnClickListener事件
2.重写onClick方法
3.给item添加点击事件
4.定义点击事件回调接口
5.声明点击事件对象
6.设置点击事件对象
7.点击事件对象调用方法

点击事件的简单描述, 想看全部内容, 往下翻

public class MyAdapter {

    // 5.声明点击事件对象
    private OnItemClickListener mOnItemClickListener;

    // 6.设置点击事件对象
    public void setOnItemClickListener(OnItemClickListener listener) {
        mOnItemClickListener = listener;
    }

    // 4.定义点击事件回调接口
    public interface OnItemClickListener {
        void onItemClick(View view, int position);
    }

    // 1.实现OnClickListener事件
    class MyAdapterViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public MyAdapterViewHolder(@NonNull View itemView) {
            super(itemView);
            // 3.给item添加点击事件
            itemView.setOnClickListener(this);
        }

        // 2.重写onClick方法
        @Override
        public void onClick(View v) {
            // 7.点击事件对象调用方法
            if (mOnItemClickListener != null) {
                mOnItemClickListener.onItemClick(v, getAdapterPosition());
            }
        }
    }
}
这里给出实现 Adapter 的完整代码

完整步骤:
1.实现OnClickListener事件
2.重写onClick方法
3.给item添加点击事件
4.定义点击事件回调接口
5.声明点击事件对象
6.设置点击事件对象
7.点击事件对象调用方法
8.实现RecyclerView.Adapter, 并指定泛型为我们自定义的ViewHolder
9.加载布局
10.申明控件
11.查找控件
12.设置数据
13.返回item的数量

adapter 类

// 8.实现RecyclerView.Adapter, 并指定泛型为我们自定义的ViewHolder
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyAdapterViewHolder> {

    // 5.声明点击事件对象
    private OnItemClickListener mOnItemClickListener;

    // 6.设置点击事件对象
    public void setOnItemClickListener(OnItemClickListener listener) {
        mOnItemClickListener = listener;
    }

    @NonNull
    @Override
    public MyAdapterViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // 9.加载布局
        View itemView = View.inflate(parent.getContext(), R.layout.item_view_layout, null);
        return new MyAdapterViewHolder(itemView);
    }

    // 12.设置数据
    @Override
    public void onBindViewHolder(@NonNull MyAdapterViewHolder holder, int position) {

    }

    // 13.返回item的数量
    @Override
    public int getItemCount() {
        return 0;
    }

    // 4.定义点击事件回调接口
    public interface OnItemClickListener {
        void onItemClick(View view, int position);
    }

    // 1.实现OnClickListener事件
    class MyAdapterViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        // 10.申明控件
        private CheckBox cbChecked;
        private TextView tvTitle;

        public MyAdapterViewHolder(@NonNull View itemView) {
            super(itemView);
            // 3.给item添加点击事件
            itemView.setOnClickListener(this);

            // 11.查找控件
            cbChecked = (CheckBox) itemView.findViewById(R.id.cbChecked);
            tvTitle = (TextView) itemView.findViewById(R.id.tvTitle);
        }

        // 2.重写onClick方法
        @Override
        public void onClick(View v) {
            // 7.点击事件对象调用方法
            if (mOnItemClickListener != null) {
                mOnItemClickListener.onItemClick(v, getAdapterPosition());
            }
        }
    }
}

布局代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="?android:listPreferredItemHeight"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    tools:context=".MainActivity">

    <CheckBox
        android:id="@+id/cbChecked"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="title"
        android:textAllCaps="false"
        android:textColor="#2196F3"
        android:textSize="18sp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@android:drawable/ic_btn_speak_now" />
        
</LinearLayout>
发布了25 篇原创文章 · 获赞 2 · 访问量 1512

猜你喜欢

转载自blog.csdn.net/geaosu2/article/details/102105460