Android 切换应用后滑动 RecyclerView 项目为空

Android RecyclerView items empty when being swiped after switching apps

首先,我看过类似的问题(例如,这个:)。这已经帮了大忙,直到我 - 或多或少,不小心 - 注意到我的这个屏幕当前(希望是最后一个)问题。

让我们从设置开始:
我有一个带有 RecyclerView 的片段,其中填充了一些 CardView 项目(它有点花哨,但这就是现在重要的)。我还创建了一个带有 SimpleCallback 实现的 ItemTouchHelper(onMove() 中没有任何内容)以使滑动项目(向右)成为可能。郑重声明:我现在正在使用 API 27。 到目前为止,还不错。

我想达到的效果:
我希望能够通过我的 SimpleCallback 实现的 onSwiped() 方法滑动要通知的项目。此外,我 希望项目消失、删除或以其他方式从 RecyclerView 中的项目列表中删除。我只想滑动它们然后让它们 return 回到原来的位置(是的,我知道这是假设滑动的项目被删除)。我在 onSwiped() 方法中使用适配器的 notifyItemChanged() 方法(也尝试使用 notifyDataSetChanged())。

问题:
有趣的是,这有效(主要归功于上述问题)- 直到我点击那个“应用程序切换”按钮(不知道是否真的有一个官方名称)并将应用程序发送到后台。一旦我再次将它放在前台并开始滑动,项目将不会(视觉上)return。它们仍在列表中,如果我再次滚动或单击“应用程序切换”按钮,它们将再次正确显示(但不会 return 滑动)。如果我返回一个屏幕并返回到列表,则相同。
这让我觉得当我将应用程序发送到后台并恢复它时,发生了一些事情。与导航到该屏幕不同的东西(在这种情况下,一切都按预期工作)——我认为这或多或少会产生相同的结果。有什么我可能在这里忽略的想法吗?

经过一番测试,终于找到了问题的根源:

我通过 Fragment 的 onStart() 而不是 onViewCreated() 初始化了 RecyclerView 及其适配器。更改后,我得到了我想要的正确结果。

经验教训:尽早设置 RecyclerView 的适配器,除非你想处理有时奇怪的问题。