Почему значения RecyclerView List изменяются при изменении из onCLick onBindViewHolder? - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть список в 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"); изменяет значение в данных. У меня большой список. Всегда ли это гарантирует изменение основного списка при изменении любого объекта.

1 Ответ

0 голосов
/ 08 апреля 2019

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...