在顺序更新期间冻结 ListView

Freeze a ListView during sequential updates

我有一个 ListView 和一个 ArrayAdapter 来支持它。列表的更新通常涉及多项 add/remove 操作,然后是排序操作。通常,更新只会删除一个项目并添加一个几乎相同的项目,它最终会出现在我删除的项目所在的相同位置。

如何防止列表视图在这些操作过程中“抽动”?理想情况下,我想冻结所有重绘操作,然后添加、删除和排序项目,然后才“解冻”UI,允许重绘。有什么方法可以实现吗?

ArrayAdapter#setNotifyOnChange() 似乎是这个的候选人。使用如下:

myAdapter.setNotifyOnChange(false);
// add, remove and sort items here
myAdapter.notifyDataSetChanged();

确保更新代码调用中没有其他内容ArrayAdapter#notifyDataSetChanged()(因为这样做会触发重绘),更新将延迟到事务完成。

编辑: 尝试此操作后,仍然偶尔会抽搐,但这也可能是由于我 选择的列表视图项目 ( back) 在每次更新后进入视图。