作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
要更新 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/
我正在对 pandas DataFrame 创建进行基准测试,发现它比创建 numpy ndarray 更昂贵。 基准代码 from timeit import Timer setup = """ i
我是一名优秀的程序员,十分优秀!