从onCLick onBindViewHolder修改后,为什么RecyclerView List值会更改?

时间:2019-04-08 04:55:05

标签: android android-recyclerview

我在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");更改数据值。我有很多。它总是保证我更改任何对象时主列表的更改。

1 个答案:

答案 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.datamainData对象的别名。