【发布时间】:2021-09-11 17:12:33
【问题描述】:
我有一个图库应用。其中我使用RecycylerView 显示照片。每当用户在onStop() 中离开应用程序时,我想保存 UI 的内容,并在用户再次在 onCreate() 中打开应用程序时恢复相同的内容。简而言之,我想消除图像加载,显示以前的 UI,然后在后台加载图像。因此,用户不会看到图像占位符。并且会觉得图片是瞬间加载的。
示例
假设您使用的是 Instagram。您按下主页按钮并导航到 WhatsApp。发送了一些消息,然后回到 Instagram。你发现你的屏幕看起来一样。因为当onPause() 事件被触发时,操作系统保存了 UI 状态。 (我不完全知道触发onPause()时android OS会保存什么。)并在触发onResume()事件时恢复相同。
即使我在 onPause() 中根本没有保存任何内容,我的应用程序也会发生同样的情况。因此,我想将该数据或 UI 状态保存在 onStop() 中,而操作系统正在将其保存在 onPause() 中。并且想在onCreate()中恢复一样。
我的尝试
我尝试将RecyclerView 的状态保存在onStop() 中,并在附加adapter 时恢复它。
...
@Override
public void onStop() {
super.onStop();
State = layoutManager.onSaveInstanceState();
}
...
adapter = new PhotosAdapter(requireActivity().getApplicationContext(), arrayList, getActivity(), this);
recyclerView.setAdapter(adapter);
layoutManager.onRestoreInstanceState(State);
...
但是,这不起作用。我遇到的问题是,如果用户在RecyclerView 中间并按下主页按钮然后返回应用程序RecyclerView 将从顶部显示并且用户必须再次滚动到中间。所以,我发现在onPause() 中保存状态可以解决这个问题。所以,我认为它可能会拯救整个layoutManager。并尝试将其保存在onStop()。但是,正如预期的那样,它没有用。
我知道覆盖 onSaveInstanceState() 会有所帮助。但是,这里不是关于 int、string 或任何数据类型。我想将屏幕上的所有内容保存在onStop() 中,以及操作系统在onPause() 中保存的任何数据。最后想恢复onCreate()中的数据。
请指导我进行进一步的步骤。
【问题讨论】:
-
你用什么来显示图像?使用 glide 或 picasso 等库,您可以明确选择是否使用应用缓存。
标签: android image android-recyclerview gallery android-lifecycle