【Android】RecyclerView的OnItemClickListener点击事件处理
来源:互联网 发布:淘宝卖眼药水 编辑:程序博客网 时间:2024/05/20 01:08
RecyclerView,谷歌新推出的,将来要取代listview,种种好处我就先不说了,说说使用它的时候有什么问题,问题就是它不像listview那样有OnItemClickListener,所以大家一拿过来不知道这个东西怎么实现点击。
网上查到的一些办法都有些莫名其妙,大部分很麻烦,其实啊,他们是没有理解到RecyclerView的真正好处是什么,没有抛弃掉listview的思想,才会遇到这种麻烦。我是安卓新手,一上来首先接触的是RecyclerView 而不是listview,所以反而更愿意接受RecyclerView了。
在回答怎么解决点击事件这个问题之前,我们首先要知道RecyclerView相比于listview的一个非常重大的好处!那就是它把 item 与RecyclerView 分开来考虑了,一个RecyclerView中可以有使用不同布局的item,这使得我们可以用非常灵活的方式来使用它了,而且这样更符合实际项目中的需求,更符合我们认知中对于一个列表控件的要求不是吗?怎么使同一RecyclerView中的item采用不同的布局(以及对应逻辑代码)呢?我将在我的另一篇博客中说明。
那么知道了这个优点,再想一想为什么RecyclerView不用listview的OnItemClickListener呢?因为谷歌认为,RecyclerView
的目的是让开发者专注于每个Item和用户的交互。所以所有的点击事件都由开发者自己添加到itemView
上,从而增加开发的灵活度。
上面加粗的这句话我是在这里看见的:http://segmentfault.com/q/1010000002939395,这十分关键,看完我立刻明白是怎么回事了,专注每个item和用户的直接交互,那比如说我想给某个item里的按钮设点击事件,我就该把代码写在那个item里,于是我跑去点开了使用RecyclerView显示数据时创建的数据适配器MyAdapter(自己写一个继承自RecyclerView.Adapter的),在这里有一个需要你自己重写的 onCreateViewHolder方法,把类似于按钮点击事件啥的写在这里就可以了,跟在Activity里写没啥两样,如下:
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater .from(parent.getContext()) .inflate(R.layout.cell, null); Button btn = (Button) v.findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //do it } }); return new MyViewHolder(v); }亲测,好用,就这么简单。
然后如果你有时候可能想知道自己点的item是第几个之类的或者只想把item作为一个整体来做点简单的事情,那么上面说的方法有点麻烦(其实也不怎么麻烦),总之这时你可以使用这位大神的代码:http://www.littlerobots.nl/blog/Handle-Android-RecyclerView-Clicks/,原理你去看他代码就行了,创建一个ItemClickSupport类,然后按他说的方法调用。
那么接下来的问题是,我们这种写法科学吗?谷歌是提倡我们这么写吗?我在stackoverflow上查了好久,看到的这个帖不错:http://stackoverflow.com/questions/24885223/why-doesnt-recyclerview-have-onitemclicklistener-and-how-recyclerview-is-dif/33999017#33999017,然后仔细一看,题主就是我这么写的(我一上来没仔细看,还在下面回答了一下 - -)。看了下获得赞最多的回答,答主看起来屌屌的,他这样说:
翻译:“RecyclerView并不是ListView的1:1重制版,而是一个崭新的、更灵活的、能处理更复杂情况的控件。正如题主所说,你的解决方法正是谷歌期待你使用的。”
嗯,看到这个我还是蛮放心啦~当然也不能随便听信stackoverflow,谁都有可能出错,如果谁有自己的见解或者发现我的理解存在什么问题,真的特别特别期待能跟我来交流,谢啦~
- 【Android】RecyclerView的OnItemClickListener点击事件处理
- android 自定义listview无法响应点击事件OnItemClickListener的原因
- android 自定义listview无法响应点击事件OnItemClickListener的原因
- android中点击ListView的OnItemClickListener事件没有响应解决
- Android RecyclerView 的点击事件
- RecyclerView点击事件处理
- Android长按事件和点击事件问题处理,OnItemLongClickListener和OnItemClickListener冲突问题
- Android长按事件和点击事件问题处理,OnItemLongClickListener和OnItemClickListener冲突问题
- Android长按事件和点击事件问题处理,OnItemLongClickListener和OnItemClickListener冲突问题
- 揭开RecyclerView的神秘面纱:处理RecyclerView的点击事件
- ListView OnItemClickListener点击事件
- android ListView的OnItemClickListener事件被其内部Button点击事件屏蔽的解决方法
- 设置RecyclerView的OnItemClickListener
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- 指向指针的指针(2)
- SpringMVC配置及初级入门11_30
- 自己实现的一个list双链表
- 在中间件维护的时候应该注意tns的地方 -------运维日志7
- UI第十四天:UI⾼级可视化设计
- 【Android】RecyclerView的OnItemClickListener点击事件处理
- 微信开发数据收发原理及消息数据格式
- C++ 友元应用
- 【C#】窗体透明度、ListBox的增删改查
- scala并发编程第二章习题
- 奇异值分解的几何解释及其应用
- 【项目经验】——文本框限制输入字符长度
- 用户角色权限管理系统-----java web 脚手架搭建(一)
- 转载AFNetworking源码解析(一)