Как изменить текст пертикулярного текстового представления в RecyclerView

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