RecyclerView添加item的点击事件
来源:互联网 发布:淘宝卖家收款到哪 编辑:程序博客网 时间:2024/06/05 04:36
步骤
adapter中
自定义一个继承自RecyclerView.Adapter的MyAdapter。
1.在MyAdapter中定义如下接口,模拟ListView的OnItemClickListener
public static interface OnItemClickListener { void onItemClick(View view , int position);}
声明一个这个接口的变量
private OnItemClickListener mOnItemClickListener1 = null;
在onCreateViewHolder()中为每个item添加点击事件
@Overridepublic MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.item1_t, null); myHolder = new MyHolder(view); //将创建的View注册点击事件 view.setOnClickListener(this); return myHolder;}
将点击事件转移给外面的调用者:
@Overridepublic void onClick(View v) { if (mOnItemClickListener != null) { //注意这里使用getTag方法获取position mOnItemClickListener.onItemClick(v,(int)v.getTag()); }}
注意上面调用接口的onItemClick()中的v.getTag()方法,这需要在onBindViewHolder()方法中设置和item的position
@Overridepublic MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.item1_t, null); myHolder = new MyHolder(view); //将创建的View注册点击事件 view.setOnClickListener(this); return myHolder;}
最后暴露给外面的调用者,定义一个设置Listener的方法():
public void setOnItemClickListener(OnItemClickListener listener) { this.mOnItemClickListener = listener;}
以上所有步骤都发生在自定义的adapter中,典型的观察者模式,有点绕的地方在于,这里涉及到两个观察者模式的使用,view的setOnClickListener本来就是观察者模式,我们将这个观察者模式的事件监听传递给了我们自己的观察者模式。
在Activity中使用 这是做项目中的传值
rec.setOnItemClickListener(new ReclerAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Bundle bundle = new Bundle(); Intent intent = new Intent(getActivity(), XiangQingjieMian.class); String img_t = list_t.get(position).getImages(); String title = list_t.get(position).getTitle(); String price=list_t.get(position).getPrice()+""; bundle.putString("img_t",img_t); bundle.putString("title",title); bundle.putString("price",price); intent.putExtras(bundle); getActivity().startActivity(intent); } }); }});
完整代码
MyAdapter.java
package com.example.samsung.jddemo.Adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.example.samsung.jddemo.Bean.Grid_Bean2;import com.example.samsung.jddemo.R;import java.util.List;import it.sephiroth.android.library.picasso.Picasso;/** * Created by samsung on 2017/11/13. */public class ReclerAdapter extends RecyclerView.Adapter<ReclerAdapter.MyHolder> implements View.OnClickListener{ private OnItemClickListener mOnItemClickListener1 = null; private List<Grid_Bean2.TuijianBean.ListBean> list_t; private Context context; private MyHolder myHolder; private OnItemClickListener mOnItemClickListener = null; @Override public void onClick(View v) { if (mOnItemClickListener != null) { //注意这里使用getTag方法获取position mOnItemClickListener.onItemClick(v,(int)v.getTag()); } } public static interface OnItemClickListener { void onItemClick(View view , int position); } public ReclerAdapter(Context context, List<Grid_Bean2.TuijianBean.ListBean> list_t) { this.context = context; this.list_t = list_t; } @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.item1_t, null); myHolder = new MyHolder(view); //将创建的View注册点击事件 view.setOnClickListener(this); return myHolder; } @Override public void onBindViewHolder(MyHolder holder, int position) { String images = list_t.get(position).getImages(); String[] split = images.split("\\|"); String imgurl = split[0]; myHolder.textView.setText(list_t.get(position).getTitle()); Picasso.with(context).load(imgurl).into(holder.imageView); //将position保存在itemView的Tag中,以便点击时进行获取 myHolder.itemView.setTag(position); } public void setOnItemClickListener(OnItemClickListener listener) { this.mOnItemClickListener = listener; } @Override public int getItemCount() { return list_t == null ? 0 : list_t.size(); } public class MyHolder extends RecyclerView.ViewHolder { private final ImageView imageView; private final TextView textView; public MyHolder(View itemView) { super(itemView); imageView = (ImageView) itemView.findViewById(R.id.t_img); textView = (TextView) itemView.findViewById(R.id.tv_t); } }}
阅读全文
0 0
- 为RecyclerView添加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的点击事件
- RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 给recyclerview的item添加点击事件的 一种方法
- RecyclerView Item 的点击事件
- RecyclerView的item点击事件
- Spring Boot 配置大全
- 使用python实现简单爬虫
- ARCore:ARCore带来的新概念
- 【实战】android多线程下载(框架)
- 基于深度学习的目标检测
- RecyclerView添加item的点击事件
- leetcode---add-binary---字符串
- Jmeter链接数据库,处理返回对象,Beanshell语法使用
- 【Intellij IDEA】eclipse项目导入
- 拼多多内推编程题
- Missing parentheses in call to 'print'——python语法错误
- 找次大数问题
- 深度学习与计算机视觉系列(3)_线性SVM与SoftMax分类器
- 微信小程序:自定义音乐进度条