安卓RecyclerView绘制问题(闪烁)

9
我有一个Activity1,其中包含一个带有RecyclerView的片段。 选择列表中的项目会启动Activity2以更改该项。在Activity2完成后返回Activity1时,我观察到RecyclerView首先呈现旧数据(保存的旧项目状态),然后在onActivityResult中执行restartLoader()以提供更新的数据集,然后RecyclerView再次使用新数据重新绘制自己。
这种行为的问题在于RecyclerView会出现“闪烁”,因为它最初绘制旧数据,然后使用新数据重新绘制自己。假设我始终想在Activity1.onActivityResult()中使用refreshLoader(),有没有什么好方法可以避免这种闪烁?
另一个复杂性是,我使用了空视图来显示recycleview为空的情况... 这会使闪烁更加明显...

有没有办法只更新单个项目的数据,而不是使用notifyItemChanged(getAdapterPosition());更新整个项目? - erluxman
可能会有其他活动删除或添加列表中的项目。从技术上讲,重新从数据库加载所有人似乎比跟踪单个项目更具普适性。 - Califf
抱歉,我无法理解你的意思。 - erluxman
1个回答

7

为了消除Recycler View上的更新闪烁,您可以使用以下方法:

 RecyclerView.ItemAnimator animator = mRecyclerView.getItemAnimator();
    if (animator instanceof SimpleItemAnimator) {
        ((SimpleItemAnimator) animator).setSupportsChangeAnimations(false);
    }

要更新 RecyclerView 中的项目,您应该使用

    notifyItemChanged(int position)

- 通知所有已注册的观察者该位置上的项已更改。 - 而不是使用notifyDataSetChanged()方法。

@Califf 但是这似乎不能用于添加项目,我正在使用“加载更多”将更多项目推入列表中,这会导致闪烁问题,但当我删除它们时就没有闪烁问题了... - mfaisalhyder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接