android如何跨片段分离/附加保留视图状态

Posted

技术标签:

【中文标题】android如何跨片段分离/附加保留视图状态【英文标题】:How does android retain view state across fragment detach/attach 【发布时间】:2012-10-06 17:11:50 【问题描述】:

我有一个标签宿主控件,它使用片段加载标签。

每次切换选项卡时,它都会分离旧片段并附加新片段。

我注意到在此过程中调用了 OnCreateView 方法,并且我的很多状态都丢失了,因为它每次都重新创建视图。但是我注意到一些视图状态(例如编辑文本的值)在分离/附加时保持不变。

我想知道当视图被完全销毁并重新创建为新视图时,android 是如何自动恢复状态的。当我只是切换选项卡时,Bundle savedInstanceState 的值始终为 null。 Bundle savedInstanceState 仅在我执行旋转屏幕之类的操作时才会填充。

据我所知,这种状态恢复发生在片段 onStart 方法被调用之前。

【问题讨论】:

【参考方案1】:

当附加和分离片段时,只有视图被销毁,片段实例保持不变。

片段管理器恢复有id的视图的状态,且saveInstanceState为null。

在旋转的情况下,片段可能由您在其他地方重新创建(在活动的 onCreate() 中?)。

【讨论】:

谢谢,我认为我缺少的部分是视图必须有一个 ID 才能保持其状态。我正在测试一些没有分配 ID 的视图。一旦我意识到一切都变得清晰了。【参考方案2】:

当一个片段即将从窗口中移除(或替换)时,它的onSaveInstanceState(Bundle)(或onRestoreInstanceState(Bundle))方法被调用。这将通过片段层次结构传播,恢复其先前的状态。

【讨论】:

以上是关于android如何跨片段分离/附加保留视图状态的主要内容,如果未能解决你的问题,请参考以下文章

Android在活动视图中附加片段获取片段已添加错误

如何在android中使用底部导航视图时恢复片段状态?

android片段-当另一个片段被推到它上面时如何保存片段中的视图状态

JSF 2.0:跨多个视图保留组件状态

Android SDK Fragments - 在多个活动中保留状态

Android Fragment - 从一个视图移动到另一个视图?