Должен ли я установить OnClickListener элемента ReyclerView внутри метода OnBindViewHolder ()? - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть RecyclerView, и я обновляю его предметы 30 раз каждую секунду.Теперь мой вопрос:

Если я установлю OnClickListner для каждого элемента в методе 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 ]

0 голосов
/ 05 февраля 2019

Да, вы можете.Но это не очень хорошая практика.Вы можете установить прослушиватель щелчков внутри ViewHolder И у вас есть getAdapterPosition(), который поможет вам получить текущий элемент, по которому щелкнули.(Может быть, вам нужно передать предмет или что-то еще).Более подробную информацию вы можете увидеть в блоге

0 голосов
/ 05 февраля 2019

вы можете использовать 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);
        }
    });
}
0 голосов
/ 05 февраля 2019

подход к реализации View.OnClickListener для элементов RetcyerView в эта статья очень хороша.Он также управляет выбором предметов.

0 голосов
/ 05 февраля 2019

Вот хороший ресурс:

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