【发布时间】:2020-09-04 19:37:27
【问题描述】:
我在理解如何复制ArrayList 方面遇到了一个小问题。有我的代码:
public class RecyclerView_Adapter extends RecyclerView.Adapter<RecyclerView_Adapter.recyclerViewHolder>{
private List<Item> list1;
private List<Item> list2;
// with constructor:
public RecyclerView_Adapter(Context context, Arraylist<Item> list1){
this.context = context;
this.list1 = list1;
this.list2 = new Arraylist<>(list1)
}
}
它应该将 list1 复制到 list2 对吗? 当我使用此代码时:
Log.i("TAG1", list1.toString());
Log.i("TAG2", list2.toString());
返回
TAG1 : []
TAG2 : []
稍后在另一个地方(例如在视图中) 相同的代码返回:
TAG1: [com.example.something1290, com.example.something1267, com.example.something1298] (some data)
TAG2: [] // <-- still returns empty array why?
当我使用此代码时,不是在构造函数中而是在其他地方,它会在两个数组中返回相同的数据。
所以问题是:
为什么在构造函数中我不能将 list1 复制到列表 2 但我必须以不同的方法执行此操作?
编辑:
它看起来像:
// with constructor:
public RecyclerView_Adapter(Context context, Arraylist<Item> list1){
this.context = context;
Log.i("TAG1", list1.toString());
this.list1 = list1;
this.list2 = new Arraylist<>(list1)
// It can return an empty array like:
TAG1 : []
}
}
但是在这种情况下:
// with constructor:
public RecyclerView_Adapter(Context context, Arraylist<Item> list1){
this.context = context;
this.list1 = list1;
Log.i("TAG1", list1.toString());
this.list2 = new Arraylist<>(list1)
// It should return an array with data, but return empty array again
TAG1 : []
}
}
【问题讨论】:
-
您能否澄清一下:构造函数中的两个 ArrayList 都为空吗?记录时 list2 是否始终为空?
-
是的,我认为如果 list1 不为空,复制任何具有相似类型的东西都很容易,例如,int a;诠释 b; a=5; b=a; (a 被复制到 b)。
-
是的,两个数组都是空的。当我将数组传递给构造函数时, Line this.list1 = list1;返回 [] 但在另一种方法中返回带有数据的数组。看起来在构造函数中 array1 返回为空,但在下一个方法中 viewholder 或 onbindviewholder 返回数据,其中 list2 仍然返回 [] 空标签。我的问题是array1,因为它复制到array2空数据,然后用数据填充自己
标签: android android-recyclerview android-adapter