简体   繁体   English

是否应在OnBindViewHolder()方法中设置ReyclerView的Item的OnClickListener?

[英]Should I set OnClickListener of ReyclerView's Item inside OnBindViewHolder() method?

I have a RecyclerView and I update it's items 30 times each second. 我有一个RecyclerView ,每秒更新30次。 Now my question is : 现在我的问题是:

If I set OnClickListner of each item inside onBindViewHolder(final ViewHolder holder, int position) method, 30 View.OnClickListner object will be created each second. 如果我在onBindViewHolder(final ViewHolder holder, int position)方法中设置每个项目的onBindViewHolder(final ViewHolder holder, int position) ,将每秒创建30个View.OnClickListner对象。 Will this cause a problem or not? 这会引起问题吗? Thanks. 谢谢。

  @Override
  public void onBindViewHolder(final ViewHolder holder, int position) {

    holder.root.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        //do something
      }
    });
  }

Here is a good resource: 这是一个很好的资源:

Recyclerview-listener Recyclerview监听

public interface OnItemClickListener {
    void onItemClick(ContentItem item);
}

public void bind(final ContentItem item, final OnItemClickListener listener) {
    ...
    itemView.setOnClickListener(new View.OnClickListener() {
        @Override public void onClick(View v) {
            listener.onItemClick(item);
        }
    });
}

the approach to implement View.OnClickListener for RetcyerView's Items in this article is very good. 实施办法View.OnClickListener为RetcyerView在项目这篇文章是非常好的。 It also manages item selection. 它还管理项目选择。

Yes you can. 是的你可以。 But it is not good practice. 但这不是一个好习惯。 You can set your click listener inside ViewHolder And you have getAdapterPosition() that will help you to get current clicked item. 您可以在ViewHolder设置单击侦听ViewHolder并且具有getAdapterPosition()可以帮助您获取当前的单击项。 (May be you need to pass item or something else). (可能是您需要传递商品或其他东西)。 More more information you can see the blog 更多信息,请参见博客

u can use onBindViewHolder to set clickable and it work 你可以使用onBindViewHolder来设置clickable并且它可以工作

like this case 像这种情况

@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {

    holder.cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(mContext, "Clicked", Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(mContext, NextModel.class);
            mContext.startActivity(intent);
        }
    });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在RecyclerView的onBindViewHolder方法中将文本设置为EditText时出错 - Error setting text to EditText inside RecyclerView's onBindViewHolder method onBindViewHolder增加位置onClickListener - onBindViewHolder increase position onClickListener notifyDataSetChanged()不调用onBindViewHolder()方法 - notifyDataSetChanged() doesn't call's onBindViewHolder() method 我可以从侦听器内部引用 OnClickListener 的按钮吗? (安卓) - Can I reference an OnClickListener's button from inside the listener? (android) 为什么在 RecyclerView.Adapter 的 onBindViewHolder 中添加 OnClickListener 被认为是不好的做法? - Why is adding an OnClickListener inside onBindViewHolder of a RecyclerView.Adapter considered bad practice? 在onBindViewHolder中获取对上一个项目的视图持有人引用 - Get view holder reference to previous item inside onBindViewHolder 在 RecyclerView Android 的 OnBindViewHolder 方法中从列表中删除项目 - Removing item from list in the OnBindViewHolder method for RecyclerView Android 通过MainActivity在ListAdapter中的项目上设置onClickListener - Set onClickListener via MainActivity on an item in a ListAdapter OnBindViewHolder下的onClickListener函数给出了奇怪的结果 - onClickListener functions under OnBindViewHolder gives weird results 带有外部参数的onClickListener内部的Android调用方法 - Android call method inside onClickListener with external parameters
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM