之间是否存在差异:
@Override void onPostExecute(ArrayList<Items> rows) {
this.dataset.clear();
this.dataset.addAll(rows);
this.dataAdapter.notifyDataSetChanged();
}
和
@Override void onPostExecute(ArrayList<Items> rows) {
this.dataset.clear();
this.dataset = rows;
this.dataAdapter.notifyDataSetChanged();
}
两者似乎都能正常工作,但我见过的大部分例子都使用了第一种模式 第二个错了吗?
答案 0 :(得分:0)
我在Doc Oracle上找到答案,
+ addAll(Collection c):按照指定集合的迭代器返回的顺序,将指定集合中的所有元素追加到此列表的末尾
+ this.dataset = rows:告诉数据集中的数据将删除并将“行”中的所有数据填充到数据集中。
答案 1 :(得分:0)
根据docs,addAll()
与变量分配的区别在于addAll()
:
按照指定集合的迭代器返回的顺序,将指定集合中的所有元素追加到此列表的末尾。
这意味着如果List
为非空,则使用addAll()
方法添加的任何对象都将附加到末尾。
另一方面,变量赋值将替换存储在this.dataset
中的当前列表与列表rows
。因此,这不会将任何内容附加到上一个列表中。
然而,因为该方法根据docs使用this.dataset.clear()
:
从此列表中删除所有元素。此调用返回后列表将为空。
两个方法的功能是相同的,因为列表在被追加或覆盖之前是空的。
请注意,为了避免使用NullPointerException
,最好在调用this.dataset
之前添加某种if语句来检查this.dataset.clear();
是否为空
在第二个例子中,this.dataset.clear()
也是多余的,因为之后会立即覆盖变量。