ReClickerView的OnClickListener [英] OnClickListener for RecyclerView

查看:100
本文介绍了ReClickerView的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,而是在Adapter.

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;
}    

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

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