【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,谁都有可能出错,如果谁有自己的见解或者发现我的理解存在什么问题,真的特别特别期待能跟我来交流,谢啦~

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 驾驶证被扣26分怎么办 c1驾驶证扣26分怎么办 驾驶证被扣6分后怎么办 c1驾照年审过期一天怎么办 审驾照时间过了怎么办 b2驾驶证扣了分怎么办 a2驾照逾期未审怎么办 中学生只想打游戏不肯学习怎么办 汽车4年未年检怎么办 2年没有验车怎么办 驾驶证过期2年半怎么办 审车逾期一个月怎么办 摩托车驾驶证年审过期一个月怎么办 摩托车驾驶证记满12分怎么办 b2驾驶证扣2分该怎么办 b2扣6分以上怎么办 审驾照晚了3天怎么办 考驾驶证3年到期怎么办 学习驾驶证明过期了怎么办 a2扣了12分怎么办 驾照a2扣6分了怎么办 a2本扣9分怎么办 驾驶证分扣3分怎么办? 异地换驾驶证没有居住证怎么办 b2开c1车扣分怎么办 驾照五次没考过怎么办 大车行驶证丢了怎么办 车的产权证丢了怎么办 车子行驶证掉了怎么办 定期的存折丢了怎么办 存折密码输错6次怎么办 营业执照原件丢失怎么办怎么注销 违章扣了14分怎么办 c1驾驶本过期了怎么办 考驾照没带身份证怎么办 上海扣满12分怎么办 美宝旅行证丢失怎么办 汽车证件全丢了怎么办 车的行驶本丢了怎么办 车和行驶证丢了怎么办 考驾照人在外地怎么办