比如:直接从主Activity中将数据源传递给adapter构建对象,然后adapter中对数据做了其他操作,这可能会引起主Activity中数据的变化:
public AdImagePicker(Activity activity, List<String> imgList,
OnImageViewListener imageViewListener) {
this.activity = activity;
this.list = imgList;//直接将引用传递
list.add("default");
this.imageViewListener = imageViewListener;
}
或者:
public AdImagePicker(Activity activity, List<String> pathList, OnImageViewListener imageViewListener) {
this.activity = activity;
if (pathList != null) {
if(list==null){
list = new ArrayList<>();
}else{
list.clear();
}
list = pathList;
//区分添加图片item
list.add("default");
}
this.imageViewListener = imageViewListener;
}
然后我们将主Activity中的集合打印出来:
path:/storage/sdcard0/DCIM/Camera/IMG_20160627_194105.jpg
path:/storage/sdcard0/DCIM/Camera/IMG_20160627_194102.jpg
path:/storage/sdcard0/360Download/206FF0C0FD7237E1C5F12C246CF067DA.png
path:default
我们看到,在adapter中修改了集合中的数据,主Activity中数据也发生了变化。
如果这样写:
public AdImagePicker(Activity activity, List<String> pathList, OnImageViewListener imageViewListener) {
this.activity = activity;
if (pathList != null) {
if (list == null) {
list = new ArrayList<>();
} else {
list.clear();
}
for (int i = 0; i < pathList.size(); i++) {
list.add(pathList.get(i));
}
//区分添加图片item
list.add("default");
}
this.imageViewListener = imageViewListener;
}
打印输出:
path:/storage/sdcard0/DCIM/Camera/IMG_20160627_194105.jpg
path:/storage/sdcard0/DCIM/Camera/IMG_20160627_194102.jpg
path:/storage/sdcard0/360Download/206FF0C0FD7237E1C5F12C246CF067DA.png
我们这里是将数据copy一份到了另一个集合,而不是直接传递给另一个集合,所以不会有问题。