Adapter 中如何为RecyclerView添加单击事件
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,Adapter 中如何为RecyclerView添加单击事件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。RecyclerView 的每
千家信息网最后更新 2025年02月07日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 ArrayListinitData(){ ArrayList arrayList = new ArrayList<>(); for (int i=0;i<50;i++){ arrayList.add("第"+i+"条数据"); } return arrayList; }}
显示效果
看完上述内容,你们掌握Adapter 中如何为RecyclerView添加单击事件的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
事件
接口
方法
位置
数据
线性
组件
代码
内容
参数
布局
更多
程序
问题
参考
监听
束手无策
为此
原因
对此
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
华盟学院网络安全课
四川网络安全技术联盟
iso 软件开发行标
flask定义数据库表
java经常访问数据库
上海银行总行软件开发
明月永在的服务器管理界面
中国著名网络安全网站
html5支持数据库的存储
金山区海航软件开发厂家价格
eki数据库
网络安全相关整改措施
网络安全操作标准规范标准
智能互联网络技术专业介绍
南京app软件开发的费用
阳江软件开发电话
企业网络安全教育培训总结
网络安全教育宣传片视频动漫
网络视频服务器的价格
什么是数据库注入攻击
四川网络安全技术联盟
学网络安全什么电脑好一点
学习网络安全法软件
子豪mc服务器
网络安全风险自查自评清单
当前青少年网络安全现状
好创意软件开发如何找投资
蓬莱商城软件开发哪家靠谱
万德数据库优势
崇明区市场软件开发服务介绍