背景
我有一个主Activity
,它包含了一个可以更改的主Fragment
,为了保留一个后台,我使用FragmentManager
的后台堆。
保持活动堆栈的主要区别在于,当片段被推送到后台并被替换时,它会调用它onDestroyView()
而不是它onDestroy()
,当它返回时,它的视图将使用onCreateView()
重新创建。 (但是没有调用onCreate()
,因为没有释放片段对象)
在活动堆栈中,它不会发生,视图仍然存在。
这对低端设备有积极的影响,因为Android操作系统可以释放一些内存而你不必保持正确的视图(在我的应用程序中,来自服务器的消息可能随时改变视图)所以人们也可以节省宝贵的带宽。
实际问题:
我们说我有一个片段,用户点击了某些内容并且它的视图已被更改,例如列表已扩展。
如果用户然后转到另一个屏幕(即片段),则前一个片段将被推送到后台,并且它的视图将被破坏。
当用户返回时,片段将被重新创建,并且不会记得"用户所做的更改,例如列表不会按照它应该扩展
那么如何在不为每个视图设置特殊情况的情况下保存状态并将其恢复?
不受欢迎的答案:
onSaveInstanceState()
:当片段被推送到backstack时,它不会被调用,因为活动没有被销毁,而且不是配置更改。