RecyclerView Дочерний элемент Нажмите на onBindViewHolder () - PullRequest
1 голос
/ 27 марта 2020

У меня есть RecyclerView и кнопка «Мне нравится» внутри. Например, я хочу сделать тост сообщение, когда я нажал кнопку. Пример кода:

class ViewHolder extends RecyclerView.ViewHolder{

    Button button;

  public ViewHolder(@NonNull View itemView) {
    super(itemView);

    button = itemView.findViewById(R.id.button);

    }
}

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

     holder.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Toast.makeText(context, ""+list.get(position).getId(), Toast.LENGTH_SHORT).show();
        }
    });

}

Так ли это правильно? Я не уверен, что это должно быть внутри onBindViewHolder () из-за проблемы с производительностью? Можете ли вы сказать мне, есть ли лучший способ для события щелчка дочернего элемента в RecyclerView? Кстати, это только примеры кодов. В действительности я имею дело с более сложными вещами, когда нажимаю кнопку (запрос к серверу).

Ответы [ 3 ]

2 голосов
/ 28 марта 2020

@ Касим Оздемир, теперь мой код такой:

class ViewHolder extends RecyclerView.ViewHolder{

Button button;

public ViewHolderMultiple(@NonNull View itemView) {
  super(itemView);

    like_button = itemView.findViewById(R.id.like_button);
    comment_button = itemView.findViewById(R.id.comment_button);

     like_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                RecyclerViewClicksUtils.likeClick(context,list,getAdapterPosition());
            }
        });

      comment_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                RecyclerViewClicksUtils.likeClick(context,list,getAdapterPosition());
            }
        });
     }

      //I write other codes in RecyclerViewClicksUtils to avoid complexity in Adapter

 public static void likeClick(final Context context, final List<PostDetailsPojo> list, 
 final int position){

    Toast.makeText(context, ""+list.get(position).getId(), Toast.LENGTH_SHORT).show();
}

Надеюсь, это должно быть правильно.

1 голос
/ 28 марта 2020

Вы можете просто сделать так:

class ViewHolder extends RecyclerView.ViewHolder{

Button button;

public ViewHolderMultiple(@NonNull View itemView) {
  super(itemView);

  button = itemView.findViewById(R.id.button);

  button.setOnClickListener(this);
}

@Override
public void onClick(View view) {
   Toast.makeText(context, ""+list.get(getAdapterPosition()).getId(), Toast.LENGTH_SHORT).show();
    }
}
0 голосов
/ 27 марта 2020

Внесите изменения:

holder.button.layout ....

Вам необходимо получить экземпляр этого держателя и разместить его в своих представлениях для каждого нажатия кнопки.

...