我有一个片段,其中包含一个RecyclerView.
选择列表中的项目将启动Activity2,用于修改项目.
在Activity2完成后返回Activity1我观察到RecyclerView首先绘制了Activity2之前的状态(保存了旧项目状态),然后在onActivityResult中我执行了restartLoader(),它提供了一组更新的数据,然后RecyclerView再次使用new重绘自身数据.
这种行为的问题是RecyclerView闪烁,因为它最初绘制旧数据然后用新数据重绘自己.假设我总是想在Activity1.onActivityResult()中使用refreshLoader(),有没有一种避免这种闪烁的好方法?
额外的复杂性是我使用空视图来显示recycleview是否为空…这会增加闪烁更多……
解决方法:
要删除回收站视图上的更新闪烁,您可以使用:
RecyclerView.ItemAnimator animator = mRecyclerView.getItemAnimator();
if (animator instanceof SimpleItemAnimator) {
((SimpleItemAnimator) animator).setSupportsChangeAnimations(false);
}
要更新RecyclerView中的项目,您应该使用
notifyItemChanged(int position)
– 通知任何注册观察员该位置的项目已更改.
而不是notifyDataSetChanged()