在顺序更新期间冻结 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) 在每次更新后进入视图。
我有一个 ListView
和一个 ArrayAdapter
来支持它。列表的更新通常涉及多项 add/remove 操作,然后是排序操作。通常,更新只会删除一个项目并添加一个几乎相同的项目,它最终会出现在我删除的项目所在的相同位置。
如何防止列表视图在这些操作过程中“抽动”?理想情况下,我想冻结所有重绘操作,然后添加、删除和排序项目,然后才“解冻”UI,允许重绘。有什么方法可以实现吗?
ArrayAdapter#setNotifyOnChange()
似乎是这个的候选人。使用如下:
myAdapter.setNotifyOnChange(false);
// add, remove and sort items here
myAdapter.notifyDataSetChanged();
确保更新代码调用中没有其他内容ArrayAdapter#notifyDataSetChanged()
(因为这样做会触发重绘),更新将延迟到事务完成。
编辑: 尝试此操作后,仍然偶尔会抽搐,但这也可能是由于我