为RecylerView添加item点击事件
来源:互联网 发布:ubuntu游客创建新用户 编辑:程序博客网 时间:2024/06/07 03:14
使用了RecylerView来展示列表,少不了要有点击事件,但是Android官方并未给暴露出接口,只能自己实现。现在来总结一下自己的实现方式,供以后回顾参考。
步骤1:写一个接口,这个接口将来是点击事件传递的参数,代码如下:
interface OnItemClickListener{//点击的哪个child和它的数据模型(也就是你解析数据时建的model)void onClick(View view, PersonBean personBean);}
让adapter实现点击接口:
private class MyRecylerAdapter extends Adapter<MyRecylerAdapter.MyRecylerViewHolder> implements View.OnClickListener
在onCreateViewHolder方法里面为每个childView注册点击事件:
@Override public MyRecylerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_recylerview, null); MyRecylerViewHolder holder = new MyRecylerViewHolder(view); //为每个View注册点击事件 view.setOnClickListener(this); return holder; }
在onBindViewHolder方法中将数据给每个childView绑定上:
@Override public void onBindViewHolder(MyRecylerViewHolder holder, int position) { PersonBean personBean = datas.get(position); holder.tv_user_name.setText(personBean.name); holder.tv_user_age.setText(String.valueOf(personBean.age)); holder.iv_user_pic.setBackgroundResource(personBean.picture); //把数据设置给每个childView背上 holder.itemView.setTag(personBean); }
在adapter中声明一个OnItemClickListener(我们自己写的接口)类型的变量,并且将adapter new出的对象设置给我们声明的这个变量:
private OnItemClickListener onItemClickListener = null;//参数类型是我们自己写的接口,这个方法就是一会要用adapter来调用 private void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; }
在点击时将数据取下来:
//这个点击事件是把childView上面的数据取下 @Override public void onClick(View v) { if (onItemClickListener != null) { onItemClickListener.onClick(v, (PersonBean) v.getTag()); } }
现在已经写完了,可以去和ListView一样去使用了,只是这个不是给RecylerView设置点击事件而是给adapter设置点击事件。
adapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onClick(View view, PersonBean personBean) {//携带回来的ChildView和这个View上面的数据 Toast.makeText(MainActivity.this, "我的名字是:" + personBean.name + ",年龄是:" + personBean.age, Toast.LENGTH_SHORT).show(); } });``
apater的完整代码如下:
private class MyRecylerAdapter extends Adapter<MyRecylerAdapter.MyRecylerViewHolder> implements View.OnClickListener { private OnItemClickListener onItemClickListener = null; @Override public MyRecylerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_recylerview, null); MyRecylerViewHolder holder = new MyRecylerViewHolder(view); //为每个View注册点击事件 view.setOnClickListener(this); return holder; } @Override public void onBindViewHolder(MyRecylerViewHolder holder, int position) { PersonBean personBean = datas.get(position); holder.tv_user_name.setText(personBean.name); holder.tv_user_age.setText(String.valueOf(personBean.age)); holder.iv_user_pic.setBackgroundResource(personBean.picture); //把数据设置给每个childView背上 holder.itemView.setTag(personBean); } @Override public int getItemCount() { return datas.size(); } //这个点击事件是把childView上面的数据取下 @Override public void onClick(View v) { if (onItemClickListener != null) { onItemClickListener.onClick(v, (PersonBean) v.getTag()); } } //参数类型是我们自己写的接口,这个方法就是一会要用adapter来调用 private void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } //ViewHolder class MyRecylerViewHolder extends ViewHolder { private final ImageView iv_user_pic; private final TextView tv_user_name, tv_user_age; public MyRecylerViewHolder(View itemView) { super(itemView); iv_user_pic = (ImageView) itemView.findViewById(R.id.iv_user_pic); tv_user_name = (TextView) itemView.findViewById(R.id.tv_user_name); tv_user_age = (TextView) itemView.findViewById(R.id.tv_user_age); } }}
接口的完整代码已经在上面给出。
0 0
- 为RecylerView添加item点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- RecyclerView为每个item添加点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- Android 为RecyclerView中的item添加点击事件
- 为RecyclerView添加item的点击事件(转载)
- Android 技术之为RecyclerView添加item的点击事件
- Android中为RecyclerView添加item的点击事件
- 为RecyclerView自行添加item的点击事件
- activeform三级联动 [ 2.0 版本 ]
- Python学习之&输入输出(一)
- HASH 与MAP 的区别
- openGPS.cn - 如何防范被高精度IP定位采集数据
- 动态规划解决0/1背包问题
- 为RecylerView添加item点击事件
- Yii2.0 中 jQuery、CSS的引入 [ 2.0 版本 ]
- HTTP与HTTPS的区别
- src和href的区别
- java注解详解
- go实现路由表操作
- 安装MySql出现Access denied for user
- 【Python爬虫5】提取JS动态网页数据
- yii2.0 rbac权限学习笔记 [ 2.0 版本 ]