代码之家  ›  专栏  ›  技术社区  ›  Hadi

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

  •  0
  • Hadi  · 技术社区  · 6 年前

    我有一个 RecyclerView 我每秒更新30次。现在我的问题是:

    onBindViewHolder(final ViewHolder holder, int position) 方法,30 View.OnClickListner 对象将每秒创建一次。这会不会造成问题?谢谢。

      @Override
      public void onBindViewHolder(final ViewHolder holder, int position) {
    
        holder.root.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            //do something
          }
        });
      }
    
    4 回复  |  直到 6 年前
        1
  •  2
  •   Philipp Kief satanTime    6 年前

    这里有一个很好的资源:

    Recyclerview-listener

    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);
            }
        });
    }
    
        2
  •  1
  •   Hadi    6 年前

    实施方法 View.OnClickListener this article 非常好。它还管理项目选择。

        3
  •  0
  •   Tariqul Islam    6 年前

    是的,你可以。但这不是好的做法。您可以在内部设置单击侦听器 ViewHolder getAdapterPosition() 这将帮助您获取当前单击的项目。(可能是您需要传递项目或其他内容)。 更多信息,您可以看到 blog

        4
  •  -2
  •   Sirwan Rahimi    6 年前

    你可以使用 onBindViewHolder

    就像这个案子

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