Android(安卓)RecyclerView使用(二) -给Item添加点击事件
16lz
2022-03-04
在上一篇博客Android RecyclerView使用(一)中介绍了一些基本用法,但是RecyclerView没有提供Item的点击事件,这里需要我们自己去实现。
方法一、直接在Adapter中的onBindViewHolder()方法中实现点击事件
@Override public void onBindViewHolder(MyViewHolder viewHolder, final int postion) { viewHolder.textView.setText(mDatas.get(postion)); viewHolder.rootView.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // 点击事件 Toast.makeText(mContext, postion + "", 1000).show(); } }); }
方法二、
1、自定义一个接口。
public interface OnItemClickListener { public void onItemClick(View view, int postion);}
2、在自定义的ViewHolder中实现onClickListenr接口,先声明一个自定义接口的变量,在自定义的ViewHolder的构造函数中添加一个参数-自定义的这个接口,并设置itemview的点击事件,在点击事件中转移到自定义的接口上,传到外面的调用者。
/** * 自定义的ViewHolder继承自android.support.v7.widget.RecyclerView.ViewHolder * * @author raphets * */public class MyViewHolder extends ViewHolder implements OnClickListener { TextView textView; private OnItemClickListener mListener;// 声明自定义的接口 // 构造函数中添加自定义的接口的参数 public MyViewHolder(View itemView, OnItemClickListener listener) { super(itemView); mListener = listener; // 为ItemView添加点击事件 itemView.setOnClickListener(this); textView = (TextView) itemView.findViewById(R.id.textView); } @Override public void onClick(View v) { // getpostion()为Viewholder自带的一个方法,用来获取RecyclerView当前的位置,将此作为参数,传出去 mListener.onItemClick(v, getPosition()); }}
3、在自定义的Adapter中定义一个方法public void setOnItemClickListener(OnItemClickListener listener) {this.mClickListener = listener;}
并暴露给外面的调用者
MyRecylerViewAdapter
public class MyRecylerViewAdapter extends Adapter { private Context mContext; private List mDatas; private OnItemClickListener mClickListener; public MyRecylerViewAdapter(Context context, List datas) { this.mContext = context; this.mDatas = datas; } @Override public int getItemCount() { return mDatas.size(); } @Override public void onBindViewHolder(MyViewHolder arg0, int arg1) { final int pos = arg1; arg0.textView.setText(mDatas.get(arg1)); } @Override public MyViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) { View view = LayoutInflater.from(mContext).inflate(R.layout.item, arg0, false); MyViewHolder holder = new MyViewHolder(view,mClickListener); return holder; } public void setOnItemClickListener(OnItemClickListener listener) { this.mClickListener = listener; }}
4、在MainActivity中使用
adapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(View view, int postion) { Toast.makeText(MainActivity.this, postion+"", 1000).show(); } });
方法三、修改RecyclerView源码,在里面实现点击事件,这里我就不说了。
可参考http://blog.csdn.net/jwzhangjie/article/details/36868515
点击下载源码
更多相关文章
- 给学android的同学们的一些建议【III】
- android 温故知新之fragment中易忽视的onViewStateRestored()
- Android中打开新的Activity的三种方法
- Android(安卓)实用开源项目集合 持续更新
- findViewById()
- [干货] Android(安卓)深入浅出 Activity 生命周期(二)
- Android(安卓)SDK 安装中组件的离线安装方法 (share)
- 浅谈Java中Collections.sort对List排序的两种方法
- Python list sort方法的具体使用