要更新 ListView ,我们可以执行以下两件事:
1)创建一个新的ArrayAdapter,并在每次数据更新时将其绑定(bind)到ListView。
this.listView.setAdapter(new ArrayAdapter(getActivity(), data));
或
2)更新已经绑定(bind)到listview的ArrayAdapter的内容:
this.arrayadapter.clear();
for (Data item : data)
this.arrayadapter.add(item);
this.arrayadapter.notifyDataSetChanged();
那么哪种方法更昂贵?
最佳答案
按照你的做法,第二个肯定更贵。 ArrayAdapter
在 clear()
以及 add()
中内部调用 notifyDataSetChanged()
。您可以将其更改为
this.arrayadapter.setNotifyOnChange(false);
this.arrayadapter.clear();
for (Data item : data)
this.arrayadapter.add(item);
this.arrayadapter.setNotifyOnChange(true);
this.arrayadapter.notifyDataSetChanged();
但即使你这样做,两个调用都包含一个同步块(synchronized block),这使得它们变慢。因此,即使您在第一种方法中创建一个新的 ArrayAdapter,我也会说它更快。
您可以通过使用带有 setItems(data)
方法的自定义适配器来进一步优化它,该方法仅替换内部数据列表。
关于android - 什么更贵?每次数据更改时创建一个新的 ArrayAdapter 还是更新现有的 ArrayAdapter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22205380/