RecyclerView 的 OnClickListener [英] OnClickListener for RecyclerView

查看:16
本文介绍了RecyclerView 的 OnClickListener的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

与 ListView 不同,Android RecyclerView 的实现似乎太复杂了.由于 RecyclerView 子项没有 OnItemClickListener,我一直在尝试实现以下内容来注册点击事件:

Unlike ListView, the Android RecyclerView seems way too complicated to implement. Since there is no OnItemClickListener for RecyclerView child, I've been trying to implement the following to register click events:

final RecyclerView rv=(RecyclerView)findViewById(R.id.recycler_view);
    LinearLayoutManager llm=new LinearLayoutManager(this);
    rv.setLayoutManager(llm);
    MyRVAdapter rva=new MyRVAdapter(persons);
    rv.setAdapter(rva);

    rv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int itemPosition = rv.indexOfChild(v);
            Log.d("Tag", String.valueOf(itemPosition));
        }
    });

出于某种原因,我无法使此代码正常工作.点击事件根本没有注册!谁能告诉我我做错了什么?我已经看到了一些解决方案,但我认为这应该有效.感谢您的帮助!

For some reason, I'm unable to get this code to work. The click event is not registered at all! Can anybody please tell me what am I doing wrong? I've seen some of the solutions, but I thought this is supposed to work. Thanks for your help!

推荐答案

不是为整个 RecyclerView 设置 onclicklistener,而是将它设置在你的 ViewHolder 类的构造函数中适配器.

Instead of setting onclicklistener for the entire RecyclerView set it inside the constructor of the ViewHolder class of your Adapter.

一些示例代码将类似于以下类,它是 recyclerview 适配器中的内部类.

Some sample code will be like the following class which is a inner class inside the recyclerview adapter.

     class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

      .....
        public ViewHolder(View itemView) {
            super(itemView);
           .......
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {

           .......
        }
    }

在适配器的 onCreateViewHolder 中,将膨胀的视图传递给 ViewGroup 的构造函数,例如,

Inside onCreateViewHolder of your adapter , pass the inflated view to the constructor of ViewGroup something like ,

 @Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.your_layout, viewGroup, false);
    ViewHolder viewHolder = new ViewHolder(v);
    return viewHolder;
}    

这篇关于RecyclerView 的 OnClickListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆