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