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

时间:2019-02-05 12:12:00

标签: java android android-recyclerview onclicklistener

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

如果我在onBindViewHolder(final ViewHolder holder, int position)方法中设置每个项目的OnClickListner,将每秒创建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 个答案:

答案 0 :(得分:2)

这里是很好的资源:

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

可以。但这不是一个好习惯。您可以在ViewHolder内设置点击侦听器,并且您有getAdapterPosition()可以帮助您获取当前点击的项目。 (可能是您需要传递商品或其他东西)。 更多信息,您可以查看blog

答案 3 :(得分:-2)

u可以使用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);
        }
    });
}