#java #android #android-studio #android-recyclerview
Вопрос:
У меня есть текст и кнопка в RecyclerView. Я пытаюсь изменить текст TextView onClick. Я попытался каким-то образом установить текст внутри onBindViewHolder, но это не сработало, и везде, где я нажимаю кнопку, текст меняется на последний элемент RecyclerView вместо нужной мне позиции.
Вот мой класс адаптера-
TextView textView;
Button button;
@NonNull
@Override
public viewHl onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.un, parent, false);
return new viewHl(view);
}
@Override
public void onBindViewHolder(@NonNull viewHl holder, int position) {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.geTextView().setText("hellow");
}
});
}
@Override
public int getItemCount() {
return 4;
}
public class viewHl extends RecyclerView.ViewHolder {
public viewHl(@NonNull View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.textView);
button=itemView.findViewById(R.id.button);
}
public TextView geTextView()
{
return textView;
}
}
}
[![enter image description here][1]][1]
[1]: https://i.stack.imgur.com/hlU1M.png
Комментарии:
1. Могу я узнать, где ваш список ?
2. Я еще не добавил ни одного списка. Текст всего текстового представления по умолчанию равен нулю. Но когда я нажимаю на кнопку, она должна быть изменена на «hellow».
3. Для большей ясности, пожалуйста, посмотрите это изображение, приведенное по ссылке. i.stack.imgur.com/hlU1M.png
Ответ №1:
Проблема в том, что вы держите в адаптере одну ссылку на кнопку и текстовое представление. Вместо этого вам нужно держать его в держателе просмотра, чтобы каждый элемент сохранял свою кнопку и текст.
public class viewHl extends RecyclerView.ViewHolder {
private TextView textView;
private Button button;
public viewHl(@NonNull View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.textView);
button=itemView.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setText("hellow");
}
});
}
}