今天从服务器拉去数据,获取数组数据直接
this.sourceDateList.addAll(sourceDateList);
然后进行一下操作
if (TextUtils.isEmpty(filterStr)) {
filterDateList=sourceDateList;
LogUtils.d("log", "=======2=return");
} else {
filterDateList.clear();
}
LogUtils.d("log", "======= sourceDateList 长度" + sourceDateList.size() );
我在else里面filterDateList.clear();清空了列表,但是再取sourceDateList的时候,sourceDateList的数据居然也为0了,找了半天没找到在哪里sourceDateList.clear(); 后来发现了 filterDateList=sourceDateList;
修改代码
if (TextUtils.isEmpty(filterStr)) {
filterDateList.clear();
filterDateList.addAll(sourceDateList) ;
LogUtils.d("log", "=======2=return");
} else {
filterDateList.clear();
}
LogUtils.d("log", "======= sourceDateList 长度" + sourceDateList.size() );
再取sourceDateList数组时就不是0了
总结
addAll 只是单纯的把数据添加给fitterDateList ,而A= B而是把B的地址赋值给了A,把A的地址指向了B,也就是两个list公用了一个地址,当filterDateList.clear();时sourceDateList也为空了。
所以谨慎使用list1=list2 ,
要代替使用list1.addAll(list2);