如何正确更新适配器的数据?

时间:2016-08-17 15:56:02

标签: java android android-arrayadapter

之间是否存在差异:

@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();  
}  

两者似乎都能正常工作,但我见过的大部分例子都使用了第一种模式 第二个错了吗?

2 个答案:

答案 0 :(得分:0)

我在Doc Oracle上找到答案,
+ addAll(Collection c):按照指定集合的​​迭代器返回的顺序,将指定集合中的所有元素追加到此列表的末尾 + this.dataset = rows:告诉数据集中的数据将删除并将“行”中的所有数据填充到数据集中。

答案 1 :(得分:0)

根据docsaddAll()与变量分配的区别在于addAll()

  

按照指定集合的​​迭代器返回的顺序,将指定集合中的所有元素追加到此列表的末尾。

这意味着如果List为非空,则使用addAll()方法添加的任何对象都将附加到末尾。

另一方面,变量赋值将替换存储在this.dataset中的当前列表与列表rows。因此,这不会将任何内容附加到上一个列表中。

然而,因为该方法根据docs使用this.dataset.clear()

  

从此列表中删除所有元素。此调用返回后列表将为空。

两个方法的功能是相同的,因为列表在被追加或覆盖之前是空的。

请注意,为了避免使用NullPointerException,最好在调用this.dataset之前添加某种if语句来检查this.dataset.clear();是否为空

在第二个例子中,this.dataset.clear()也是多余的,因为之后会立即覆盖变量。