Почему значения списка RecyclerView меняются при изменении onCLick onBindViewHolder?

У меня есть список в RecyclerView``. Всякий раз, когда я изменяю какое-либо значение объекта в Onclick внутри OnBindViewHolder, значение основного списка изменяется. Я хочу этого, но не могу понять, почему это происходит.

Гарантирует ли это, что всякий раз, когда я изменяю объект внутри onBindViewHolder, он меняет основной список?

Я думаю, что это связано с передачей по ссылке или что-то в этом роде.

public class AttendanceAdapter extends RecyclerView.Adapter<AttendanceAdapter.ViewHolder> {

    List<ChildAttendance> data ;


    public AttendanceAdapter(List<ChildAttendance> childList) {

        data=new ArrayList<>(childList);

    }


    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
         ChildAttendance child =  data.get(position);

         ((ViewHolder) holder).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                  child.setName("checked");
            }
        });
    }
}

child.setName("checked"); изменяет значение в данных. У меня есть большой список. Всегда ли гарантируется изменение основного списка при изменении любого объекта.

Да, список pas по ссылке.

Rofie Sagara 08.04.2019 06:58
0
1
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

I have a List in a Recyclerview. Whenever I change any object value in Onclick inside OnBindViewHolder the main list value changes.

Это правильное поведение в Java. Это потому, что всякий раз, когда вы передаете значение объекта, вы передаете ссылку на него. Итак, всякий раз, когда вы создаете экземпляр адаптера со следующей строкой:

List<ChildAttendance> mainData; // assuming there are data here.
...
AttendanceAdapter adapter = new AttendanceAdapter(mainData);

Ваш AttendanceAdapter.data указывает на то же место, что и mainData. Короче говоря, AttendanceAdapter.data — это псевдоним для mainData объекта.

Другие вопросы по теме