我在RecyclerView中有一个列表''。每当我在OnBindViewHolder
内部的Onclick中更改任何对象值时,主列表值都会更改。我想要这个,但我不明白为什么会这样。
是否可以保证只要我更改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");
更改数据值。我有很多。它总是保证我更改任何对象时主列表的更改。
答案 0 :(得分:0)
我在Recyclerview中有一个列表。每当我更改任何对象值 在OnBindViewHolder内部的Onclick上,主列表值会更改。
这是Java中的正确行为。这是因为whenever you're passing a value of an object, you're passing a reference to it。因此,每当使用以下行实例化适配器时:
List<ChildAttendance> mainData; // assuming there are data here.
...
AttendanceAdapter adapter = new AttendanceAdapter(mainData);
您的AttendanceAdapter.data
指向与mainData
相同的位置。简而言之,AttendanceAdapter.data
是mainData
对象的别名。