RecyclerView设置点击监听器OnClickListener
2016-05-13 08:24
369 查看
Android现在越来越广泛的使用RecyclerView来实现更好的布局效果(比如瀑布流、卡片。。。)。但是RecyclerView的数据适配器RecyclerView.Adapter跟传统的BaseAdapter、ArrayAdapter之类的数据适配器有些不同,这也造成了在为子项添加View事件监听器时有些棘手,相信大家平时在使用当中也能感受得到。
为什么这么说呢?
1. 传统的的适配器中,我们一般都是在getView()方法中为相应的View添加各种监听器,对不同的View做适配处理。
但是在RecyclerView却没有这么容易了,在同View适配密切相关的函数中:
那么我们是不是就不能为子项View添加事件监听器了呢?当然不是!
这里我们就要好好的利用这一个ViewHolder来实现添加事件监听器。
而添加的事件监听器你需要做一些处理,以OnClickListener举例:
至此,你就已经为RecyclerView添加上了一个Click事件的监听器,并能够在监听回调函数中从数据集取到正确的数据以进一步处理。
这里对于View.getTag() 和 View.setTag()的使用请看我另外一篇博文:View.getTag()和View.setTag()使用指南
为什么这么说呢?
1. 传统的的适配器中,我们一般都是在getView()方法中为相应的View添加各种监听器,对不同的View做适配处理。
View getView(int position, View convertView, ViewGroup parent);而getView()传入了对添加事件监听器来说极其重要的两个参数,一个是在View集(通过DataSetObserver同数据集相关联)中的位置参数position, 另外则是需要适配的子View引用。因此我可以很方便的就直接添加上了事件监听器,比方说OnClickListener可以直接 convertView.setOnClickListener(View.OnclickListner), 然后在点击回调里面通过position来取到数据集当中相应的数据。
但是在RecyclerView却没有这么容易了,在同View适配密切相关的函数中:
public void onBindViewHolder(ViewHolder viewHolder, int position)只有一个ViewHolder(用来持有RecyclerView子项里面的各种View引用)和 position, position参数有了,我们可以通过position取到数据,但是却没有了子项View, 而只有一个持有子项内子View引用的Holder.
那么我们是不是就不能为子项View添加事件监听器了呢?当然不是!
这里我们就要好好的利用这一个ViewHolder来实现添加事件监听器。
public class ViewHolder extends RecyclerView.ViewHolder { private RelativeLayout mRlContent; private ImageView mThumbIv;假设我们在子项里面定义了这样一个布局,mRlContent对应的是父布局,mThumbIv是它的子View. 那么我可以在onBindViewHolder里面这样来玩:
viewHolder.mThumbIv.setTag(position); viewHolder.mThumbIv.setOnClickListener(View.OnclickListener);注:这里对于ViewHolder变量的设置最好通过公有方法而不是直接调用,除非你将该ViewHolder做成内部类只在该数据适配器RecyclerView.Adapter中使用。
而添加的事件监听器你需要做一些处理,以OnClickListener举例:
private class ItemClickListener implements View.OnClickListener { @Override public void onClick(View v) { int position = (int) v.getTag(); //点击相应的子项View将会回调到这里,你可以取出数据并作出相应的处理. //在多个View使用同一个监听器时,你需要对View进行识别,View.getId()方法将能非常有效的帮助你。 } }<pre name="code" class="java"> private ItemClickListener mItemClickListener;
至此,你就已经为RecyclerView添加上了一个Click事件的监听器,并能够在监听回调函数中从数据集取到正确的数据以进一步处理。
这里对于View.getTag() 和 View.setTag()的使用请看我另外一篇博文:View.getTag()和View.setTag()使用指南
相关文章推荐
- RecyclerView的使用之多种Item加载布局
- Android App开发中使用RecyclerView实现Gallery画廊的实例
- Android RecyclerView加载不同布局简单实现
- Android RecyclerView布局就这么简单
- Android App开发中RecyclerView控件的基本使用教程
- Android开发之RecyclerView控件
- 学习Android Material Design(RecyclerView代替ListView)
- 使用RecyclerView添加Header和Footer的方法
- Android中使用RecyclerView实现下拉刷新和上拉加载
- Android使用RecyclerView实现自定义列表、点击事件以及下拉刷新
- Android项目实战之仿网易新闻的页面(RecyclerView )
- Android应用开发中RecyclerView组件使用入门教程
- RecyclerView.Adapter
- 支持addHeaderView、 addFooterView、分页加载数据的RecyclerView
- CheckBox的OnCheckedChangeListener、OnClickListener、OnTouchListener
- The method setOnClickListener(View.OnClickListener)解决办法
- 如何使用v7新控件RecyclerView
- RecyclerView完全解析
- 关于eclipse使用导入RecycleView时遇到的问题NoClassDefFoundError: android.support.v7.recyclerview.R$styleable
- android recyclerview adaper封装