为RecyclerView自行添加item的点击事件
来源:互联网 发布:js newdate 编辑:程序博客网 时间:2024/06/06 12:48
RecyclerView侧重的是布局的灵活性,虽说可以替代ListView但是连基本的点击事件都没有,这篇文章就来详细讲解一下如何为RecyclerView的item添加点击事件,顺带也复习一下观察者模式。
最终目的:
模拟ListView的setOnItemClickListener()方法,调用者只须调用类似于setOnItemClickListener的东西就能获得被点击item的相关数据。
原理:
为RecyclerView的每个子item设置setOnClickListener,然后在onClick中再调用一次对外封装的接口,将这个事件传递给外面的调用者。而“为RecyclerView的每个子item设置setOnClickListener”在Adapter中设置。其实直接在onClick中也能完全处理item的点击事件,但是这样会破坏代码的整体逻辑性。
步骤:
自定义一个继承自RecyclerView.Adapter的MyAdapter。
1.在MyAdapter中定义如下接口,模拟ListView的OnItemClickListener:
public interface OnItemClickListener { void onItemClick(View view, int position); }
然后在在当前Adapter中声明一个这个接口的变量
private OnItemClickListener mOnItemClickListener;在onCreateViewHolder()中为每个item添加点击事件
@Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.item_layout, parent, false); MyViewHolder myViewHolder = new MyViewHolder(view); view.setOnClickListener(this);//将创建的Vie注册点击事件 return myViewHolder; }将点击事件转移给外面的调用者
@Override public void onClick(View view) { if (mOnItemClickListener != null) { mOnItemClickListener.onItemClick(view, (int) view.getTag());//注意这里使用getTag方法获取position } }注意上面调用接口的onItemClick()中的view.getTag()方法,这需要在onBindViewHolder()方法中设置item的position
@Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.itemView.setTag(position);//将position保存在itemView的tag中,一边点击时获取 }
最后暴露给外面的调用者,定义一个设置Listener的方法():
public void setOnItemClickListener(OnItemClickListener listener) { this.mOnItemClickListener = listener; }以上所有步骤都发生在自定义的adapter中,典型的观察者模式,有点绕的地方在于,这里涉及到两个观察者模式的使用,view的setOnClickListener本来就是观察者模式,我们将这个观察者模式的事件监听传递给了我们自己的观察者模式。
在Activity中使用:
mRecyclerAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(View view, int position) { ToastUtils.success(TestActivity.this,"点击" + position); } });
好了,到这里为RecyclerView添加item的点击事件就介绍完毕了,是不是很easy!^_^
总结:
在ListView中我们是调用ListView的setOnItemClickListener:
而在我们这里是调用我们自己定义的mAdapter的setOnItemClickListener。
0 0
- 为RecyclerView自行添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- RecyclerView为每个item添加点击事件
- 为RecyclerView添加item的点击事件(转载)
- Android 技术之为RecyclerView添加item的点击事件
- Android中为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件(个人备忘录)
- 给RecyclerView的Item添加点击事件
- 计算机图形学L系统生成树的简单解释
- 【代码笔记】iOS-单击手势的添加
- java-filter 工作原理、调用规则顺序及与servlet的关系
- python 图像的形变, 旋转与缩放 (transform) (1)
- Linux查看物理CPU个数、核数、逻辑CPU个数
- 为RecyclerView自行添加item的点击事件
- android获取屏幕宽高度的四种方法
- 考试篇(5.2) NSE4 题库 15. 高级IPsec ❀ 飞塔 (Fortinet) 网络安全专家
- 如何在MyEclipse10中配置Jad反编译工具?
- 5.3
- CSS常见布局解决方案
- js切换页面文字大小和背景颜色
- java中compareTo和compare方法之比较
- DialogFragment与Fragment之间互相传值