给recyclerview的item添加点击事件的 一种方法
来源:互联网 发布:拳皇14键盘优化 编辑:程序博客网 时间:2024/06/06 04:15
首先,recyclerview的item点击事件的添加有很多方法,这里只说一种我用的最多的,不喜勿喷。也欢迎留言指教。
recyclerview虽然比listview要好,但是有好处的东西总是有坏处的 ,比如,recyclerview就没有对item点击事件的监听方法,之提供了一个onItemTouchListener,使用onItemTouchListener也可以实现对item点击事件的监听,但是其中需要重写ontouchevent等方法,个人觉得不如我接下来的方法好:
先看效果图
首先,因为官方没有提供给我们item的clicklistener,那么 我们就自己自定义一个就好了,,如下 定义接口:
public interface OnRecyclerviewItemClickListener { void onItemClickListener(View v,int position);}
既然官方没有提供点击的监听,所以我们这个监听方法就不能绑定在recyclerview对象上,因此,我们将 这个步骤转移到adapter中进行,(这个过程使用观察者模式)。
看adapter的代码
package com.example.lixu.xiezuomao.view.adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.example.lixu.xiezuomao.R;import com.example.lixu.xiezuomao.modle.OnRecyclerviewItemClickListener;import com.example.lixu.xiezuomao.view.bean.xiaoshuoBean;import java.util.List;/** * Created by lixu on 2017/6/27. */public class RecyclerViewAdapter extends RecyclerView.Adapter implements View.OnClickListener { private LayoutInflater inflater; private Context context; private List<xiaoshuoBean> xiaoshuoList; //声明自定义的监听接口 private OnRecyclerviewItemClickListener mOnRecyclerviewItemClickListener = null; //构造方法中添加自定义监听接口 public RecyclerViewAdapter(Context context, List<xiaoshuoBean> xiaoshuoList,OnRecyclerviewItemClickListener mOnRecyclerviewItemClickListener) { this.context = context; this.xiaoshuoList = xiaoshuoList; inflater = LayoutInflater.from(context); this.mOnRecyclerviewItemClickListener = mOnRecyclerviewItemClickListener; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.shouye_recyclerview_item_layout, parent, false); //这里 我们可以拿到点击的item的view 对象,所以在这里给view设置点击监听, view.setOnClickListener(this); return new MyViewHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { MyViewHolder holder1 = (MyViewHolder) holder; xiaoshuoBean xiaoshuoBean = xiaoshuoList.get(position); holder1.titleTv.setText(xiaoshuoBean.getTitle()); holder1.chapterTv2.setText(xiaoshuoBean.getChapter2()); holder1.chapterTv1.setText(xiaoshuoBean.getChapter1()); holder1.itemView.setTag(position);//给view设置tag以作为参数传递到监听回调方法中 } @Override public int getItemCount() { return xiaoshuoList.size(); } @Override public void onClick(View v) { //将监听传递给自定义接口 mOnRecyclerviewItemClickListener.onItemClickListener(v, ((int) v.getTag())); } class MyViewHolder extends RecyclerView.ViewHolder{ private TextView titleTv; private TextView chapterTv1; private TextView chapterTv2; public MyViewHolder(View itemView) { super(itemView); chapterTv1 = ((TextView) itemView.findViewById(R.id.zhangjie1_tv)); chapterTv2 = ((TextView) itemView.findViewById(R.id.zhangjie2_tv)); titleTv = ((TextView) itemView.findViewById(R.id.title_tv)); } }}
如何使用:
在activity中或者fragment中声明自定义的监听接口
private OnRecyclerviewItemClickListener onRecyclerviewItemClickListener = new OnRecyclerviewItemClickListener() { @Override public void onItemClickListener(View v, int position) { //这里的view就是我们点击的view position就是点击的position Toast.makeText(getContext()," 点击了 "+position,Toast.LENGTH_SHORT).show(); } };
将接口作为参数传入adapter的构造方法中即可:
//初始化recyclerview RecyclerViewAdapter adpter = new RecyclerViewAdapter(getActivity(),xsBean,onRecyclerviewItemClickListener); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(adpter);
阅读全文
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添加点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- Mac iOS 模拟器录制屏幕生成Gif
- Codeforces 820B Mister B and Angle in Polygon
- 【Tomcat】Tomcat Session在Redis共享
- kafka性能调优
- Activity生命周期
- 给recyclerview的item添加点击事件的 一种方法
- 打印1到n最大的n位数
- CMarkup成员方法简介
- 《道德经》第三十七章
- chrome浏览器的跨域设置——包括版本49前后两种设置
- java多线程和Python多线程
- 百度百科对“设备独立性的解释
- Python编程之http简介
- HDU 1234 JAVA