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片段-当另一个片段被推到它上面时如何保存片段中的视图状态