Adapter 中如何为RecyclerView添加单击事件
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Adapter 中如何为RecyclerView添加单击事件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。RecyclerView 的每
千家信息网最后更新 2026年11月01日Adapter 中如何为RecyclerView添加单击事件
Adapter 中如何为RecyclerView添加单击事件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
RecyclerView 的每个Item的点击事件并没有像 ListView 一样封装在组件中,需要 Item 的单击事件时就需要自己去实现,在 Adapter 中为RecyclerView 添加单击事件参考如下:
第一步:
在 RecyclerView 的 Adapyer 中定义单击事件的回调接口:
/** * 定义 RecyclerView 选项单击事件的回调接口 */public interface OnItemClickListener{ //参数(父组件,当前单击的View,单击的View的位置,数据) void onItemClick(RecyclerView parent,View view, int position, String data);}第二步:
在RecyclerView的Adapyer中声明该接口,并提供setter方法:
private OnItemClickListener onItemClickListener;public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener = onItemClickListener;}第三步:
在RecyclerView的Adapyer类实现View.OnClickListener接口,并重写onClick(View view)方法,然后设置给接口的事件监听:
public class RvAdapter1 extends RecyclerView.Adapterimplements View.OnClickListener{ ... view.setOnClickListener(this);//设置监听器 ... @Override public void onClick(View view) { //根据RecyclerView获得当前View的位置 int position = recyclerView.getChildAdapterPosition(view); //程序执行到此,会去执行具体实现的onItemClick()方法 if (onItemClickListener!=null){ onItemClickListener.onItemClick(recyclerView,view,position,mList.get(position)); } } ...}
第四步:
在MainActivity中通过Adapter设置每个Item的单击事件:
adapter.setOnItemClickListener(new RvAdapter1.OnItemClickListener() { @Override public void onItemClick(RecyclerView parent, View view, int position, String data) { Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show(); }});参考代码
Adapter
/** * Created by jzman on 2017/5/13 0013. * RecycleView的Adapter */public class RvAdapter1 extends RecyclerView.Adapterimplements View.OnClickListener{ private Context mContext; private RecyclerView recyclerView; private ArrayList mList; public RvAdapter1() {} public RvAdapter1(Context mContext, ArrayList mList) { this.mContext = mContext; this.mList = mList; } /** * 用于创建ViewHolder * @param parent * @param viewType * @return */ @Override public DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(mContext).inflate(R.layout.item,null); view.setOnClickListener(this); //使用代码设置宽高(xml布局设置无效时) view.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); DataViewHolder holder = new DataViewHolder(view); return holder; } /** * 绑定数据 * @param holder * @param position */ @Override public void onBindViewHolder(DataViewHolder holder, int position) { holder.tv_data.setText(mList.get(position)); } /** * 选项总数 * @return */ @Override public int getItemCount() { return mList.size(); } @Override public void onClick(View view) { //根据RecyclerView获得当前View的位置 int position = recyclerView.getChildAdapterPosition(view); //程序执行到此,会去执行具体实现的onItemClick()方法 if (onItemClickListener!=null){ onItemClickListener.onItemClick(recyclerView,view,position,mList.get(position)); } } /** * 创建ViewHolder */ public static class DataViewHolder extends RecyclerView.ViewHolder{ TextView tv_data; public DataViewHolder(View itemView) { super(itemView); tv_data = (TextView) itemView.findViewById(R.id.tv_recycle); } } private OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener = onItemClickListener; } /** * 定义RecyclerView选项单击事件的回调接口 */ public interface OnItemClickListener{ //参数(父组件,当前单击的View,单击的View的位置,数据) void onItemClick(RecyclerView parent,View view, int position, String data); } /** * 将RecycleView附加到Adapter上 */ @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); this.recyclerView= recyclerView; } /** * 将RecycleView从Adapter解除 */ @Override public void onDetachedFromRecyclerView(RecyclerView recyclerView) { super.onDetachedFromRecyclerView(recyclerView); this.recyclerView = null; }}
MainActivity
/** * Created by jzman on 2017/5/13 0013. */public class MainActivity extends AppCompatActivity { private RecyclerView rv; RvAdapter1 adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rv = (RecyclerView) findViewById(R.id.rv); //设置布局管理器// rv.setLayoutManager(new LinearLayoutManager(this));//线性 rv.setLayoutManager(new GridLayoutManager(this,4));//线性// rv.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));//线性 adapter = new RvAdapter1(this,initData()); adapter.setOnItemClickListener(new RvAdapter1.OnItemClickListener() { @Override public void onItemClick(RecyclerView parent, View view, int position, String data) { Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show(); } }); rv.setAdapter(adapter); } public static ArrayList initData(){ ArrayList arrayList = new ArrayList<>(); for (int i=0;i<50;i++){ arrayList.add("第"+i+"条数据"); } return arrayList; }} 显示效果

看完上述内容,你们掌握Adapter 中如何为RecyclerView添加单击事件的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
事件
接口
方法
位置
数据
线性
组件
代码
内容
参数
布局
更多
程序
问题
参考
监听
束手无策
为此
原因
对此
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技园
上海睿民互联网科技有限公司
互联网巨头反垄断金融科技
广州互联网科技公司
互联网科技金融公司
互联网科技公司官网
火传媒上海互联网科技
互联网科技网站
互联网科技公司做什么
天扬科技互联网广告
阿里互联网科技公司
互联网公司科技股
互联网科技与大数据专业
哈尔滨屹滨互联网科技有限公司
畅思互联网科技
允成互联网科技有限公司融资
洛阳共同富裕互联网科技有限公司
晋城互联网科技
产业互联网科技服务公司
云鲸互联网络科技有限公司
新华互联网科技
互联网科技咨询
福州新华互联网科技学校 知乎
互联网5g黑科技有哪些
互联网保险科技创业
互联网数据科技专业
电子商务与互联网科技的关系
卡尔迅互联网科技有限公司
容联科技互联网电商
河南商务圈互联网科技有限公司