博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RecyclerView的Item的单击事件
阅读量:5871 次
发布时间:2019-06-19

本文共 5637 字,大约阅读时间需要 18 分钟。

RecyclerView 的每个Item的点击事件并没有像 ListView 一样封装在组件中,需要 Item 的单击事件时就需要自己去实现,在 Adapter 中为RecyclerView 添加单击事件参考如下:

RecyclerView的使用方法请参考:

第一步:

在 RecyclerView 的 Adapyer 中定义单击事件的回调接口:

/** * 定义 RecyclerView 选项单击事件的回调接口 */public interface OnItemClickListener{    //参数(父组件,当前单击的View,单击的View的位置,数据)    void onItemClick(RecyclerView parent,View view, int position, String data);}

第二步:

在RecyclerView的Adapyer中声明该接口,并提供setter方法:

private OnItemClickListener onItemClickListener;public void setOnItemClickListener(OnItemClickListener onItemClickListener){    this.onItemClickListener = onItemClickListener;}

第三步:

在RecyclerView的Adapyer类实现View.OnClickListener接口,并重写onClick(View view)方法,然后设置给接口的事件监听:

public class RvAdapter1 extends RecyclerView.Adapter
implements View.OnClickListener{ ... view.setOnClickListener(this);//设置监听器 ... @Override public void onClick(View view) { //根据RecyclerView获得当前View的位置 int position = recyclerView.getChildAdapterPosition(view); //程序执行到此,会去执行具体实现的onItemClick()方法 if (onItemClickListener!=null){ onItemClickListener.onItemClick(recyclerView,view,position,mList.get(position)); } } ...}

第四步:

在MainActivity中通过Adapter设置每个Item的单击事件:

adapter.setOnItemClickListener(new RvAdapter1.OnItemClickListener() {    @Override    public void onItemClick(RecyclerView parent, View view, int position, String data) {        Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show();    }});

参考代码

Adapter
/** * Created by jzman on 2017/5/13 0013. * RecycleView的Adapter */public class RvAdapter1 extends RecyclerView.Adapter
implements View.OnClickListener{ private Context mContext; private RecyclerView recyclerView; private ArrayList
mList; public RvAdapter1() {} public RvAdapter1(Context mContext, ArrayList
mList) { this.mContext = mContext; this.mList = mList; } /** * 用于创建ViewHolder * @param parent * @param viewType * @return */ @Override public DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(mContext).inflate(R.layout.item,null); view.setOnClickListener(this); //使用代码设置宽高(xml布局设置无效时) view.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); DataViewHolder holder = new DataViewHolder(view); return holder; } /** * 绑定数据 * @param holder * @param position */ @Override public void onBindViewHolder(DataViewHolder holder, int position) { holder.tv_data.setText(mList.get(position)); } /** * 选项总数 * @return */ @Override public int getItemCount() { return mList.size(); } @Override public void onClick(View view) { //根据RecyclerView获得当前View的位置 int position = recyclerView.getChildAdapterPosition(view); //程序执行到此,会去执行具体实现的onItemClick()方法 if (onItemClickListener!=null){ onItemClickListener.onItemClick(recyclerView,view,position,mList.get(position)); } } /** * 创建ViewHolder */ public static class DataViewHolder extends RecyclerView.ViewHolder{ TextView tv_data; public DataViewHolder(View itemView) { super(itemView); tv_data = (TextView) itemView.findViewById(R.id.tv_recycle); } } private OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener = onItemClickListener; } /** * 定义RecyclerView选项单击事件的回调接口 */ public interface OnItemClickListener{ //参数(父组件,当前单击的View,单击的View的位置,数据) void onItemClick(RecyclerView parent,View view, int position, String data); } /** * 将RecycleView附加到Adapter上 */ @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); this.recyclerView= recyclerView; } /** * 将RecycleView从Adapter解除 */ @Override public void onDetachedFromRecyclerView(RecyclerView recyclerView) { super.onDetachedFromRecyclerView(recyclerView); this.recyclerView = null; }}
MainActivity
/** * Created by jzman on 2017/5/13 0013. */public class MainActivity extends AppCompatActivity {    private RecyclerView rv;    RvAdapter1 adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        rv = (RecyclerView) findViewById(R.id.rv);        //设置布局管理器//        rv.setLayoutManager(new LinearLayoutManager(this));//线性        rv.setLayoutManager(new GridLayoutManager(this,4));//线性//        rv.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));//线性        adapter = new RvAdapter1(this,initData());        adapter.setOnItemClickListener(new RvAdapter1.OnItemClickListener() {            @Override            public void onItemClick(RecyclerView parent, View view, int position, String data) {                Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show();            }        });        rv.setAdapter(adapter);    }    public static ArrayList
initData(){ ArrayList
arrayList = new ArrayList<>(); for (int i=0;i<50;i++){ arrayList.add("第"+i+"条数据"); } return arrayList; }}

显示效果

RecyclerView的Item的单击事件

可以关注微信公众号:jzman-blog 获取最新文章更新,欢迎一起交流学习!

RecyclerView的Item的单击事件

转载于:https://blog.51cto.com/8081755/2407600

你可能感兴趣的文章
七天学会ASP.NET MVC (四)——用户授权认证问题
查看>>
upgrade to iOS7,how to remove stroyboard?
查看>>
影响企业信息化成败的几点因素
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
zabbix监控部署
查看>>
关于Tomcat下项目中文名在Windows和Linux下编码混乱问题解决
查看>>
struts中的xwork源码下载地址
查看>>
Android硬件抽象层(HAL)深入剖析(二)
查看>>
CDays–4 习题一至四及相关内容解析。
查看>>
L3.十一.匿名函数和map方法
查看>>
前端自动化构建工具webpack (一)之webpack安装 和 设置webpack.confi.js
查看>>
java面向对象高级分层实例_实体类
查看>>
Guice 练习 constructorbindings demo
查看>>
android aapt 用法 -- ApkReader
查看>>
[翻译]用 Puppet 搭建易管理的服务器基础架构(3)
查看>>
Android -- AudioPlayer
查看>>
Python大数据依赖包安装
查看>>
Android View.onMeasure方法的理解
查看>>
Node.js 爬虫初探
查看>>
ABP理论学习之仓储
查看>>