对RecyclerView的item添加点击事件
来源:互联网 发布:音响 知乎 编辑:程序博客网 时间:2024/06/05 09:33
对RecyclerView的item添加点击事件
对于用惯了listview的程序猿来说,recyclerview没有item没有点击事件实在是一件很蛋疼的事情。在某些情况下,recyclerview确实要比listview好用的多,所以,今天闲来无事,就研究研究,给recyclerview的item添加个点击事件,废话不多说,直接上代码。
1.首先定义一个接口,用于点击事件
- public static interface OnItemClickListener { void onItemClick(View view , int position);}
2.声明一下这个接口的变量
- private OnItemClickListener mOnItemClickListener = null;//自定义点击事件的接口
3.在onCreateViewHolder()中为每个item添加点击事件
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
- View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false); ViewHolder viewHolder = new ViewHolder(view); //将创建的View注册点击事件
- view.setOnClickListener(this); return viewHolder;}
4.将点击事件转移给调用者
- @Override
- public void onClick(View v) {
- if (mOnItemClickListener != null) {
- //注意这里使用getTag方法获取position
- mOnItemClickListener.onItemClick(v,(int)v.getTag());
- }}
5.上面调用接口的onItemClick()中的v.getTag()方法,这需要在onBindViewHolder()方法中设置和item的position
- @Override
- public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
- ViewHolder viewholder = (ViewHolder) holder;
- viewholder.mTextView.setText(testdatas[position]); //将position保存在itemView的Tag中,以便点击时进行获取
- viewholder.itemView.setTag(position);
- }
6.最后暴露给外面的调用者,定义一个设置Listener的方法()
- public void setOnItemClickListener(OnItemClickListener listener) {
- this.mOnItemClickListener = listener;
- }
7.好了,到了这里,就算大功告成了,接下来就是通过适配器adapter进行调用了,相信大家都会,这里就不累述了。(下附完整代码)。
- /**
- * Created by xiaoyang-1101 on 2017/8/17.
- */
- public class MyTestAdapter extends RecyclerView.Adapter implements View.OnClickListener {
- private String[] testdatas;
- public MyTestAdapter(String[] datas) {
- testdatas = datas;
- }
- private OnItemClickListener mOnItemClickListener = null;
- //自定义点击事件的接口
- public static interface OnItemClickListener {
- void onItemClick(View view , int position);
- }
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
- View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
- ViewHolder viewHolder = new ViewHolder(view);
- //将创建的View注册点击事件
- view.setOnClickListener(this);
- return viewHolder;
- }
- @Override
- public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
- ViewHolder viewholder = (ViewHolder) holder;
- viewholder.mTextView.setText(testdatas[position]);
- //将position保存在itemView的Tag中,以便点击时进行获取
- //可以直接放入其他你需要的对象,一般是放位置信息position
- viewholder.itemView.setTag(position);
- }
- @Override
- public void onClick(View v) {
- if (mOnItemClickListener != null) {
- //注意这里使用getTag方法获取position
- mOnItemClickListener.onItemClick(v,(int)v.getTag());
- }
- }
- public void setOnItemClickListener(OnItemClickListener listener) {
- this.mOnItemClickListener = listener;
- }
- //获取数据的数量
- @Override
- public int getItemCount() {
- return testdatas.length;
- }
- //自定义的ViewHolder,持有每个Item的的所有界面元素
- class ViewHolder extends RecyclerView.ViewHolder {
- public TextView mTextView;
- public ViewHolder(View view){
- super(view);
- mTextView = (TextView) view.findViewById(R.id.my_text);
- }
- }
- }
阅读全文
1 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的点击事件
- 为RecyclerView添加item的点击事件
- 给recyclerview的item添加点击事件的 一种方法
- RecyclerView Item 的点击事件
- RecyclerView的item点击事件
- 关于idea
- Java Web
- 详细讲解二叉树三种遍历方式的递归与非递归实现
- eclipse 导入mvn 项目 阻塞 installing dynamic web module facet
- hdu-1013 Digital Roots
- 对RecyclerView的item添加点击事件
- 多条目
- 数据结构实验:连通分量个数
- 索引优化
- 应用位异或交换两个变量的值
- spring bean 声明学习
- 【C
- I/O复用
- Image-to-Image Translation with Conditional Adversarial Networks