【发布时间】:2011-09-16 14:11:48
【问题描述】:
可能重复:
Separate Back Stack for each tab in Android using Fragments
我最近开始在 FragmentActivity 中的选项卡主机内使用片段的应用程序工作。Android 文档说这样做是因为 TabActivity 类现在已弃用。为了使用片段,我使用的是 android v4 支持库。
目前我的应用程序包含一个标签,其中存在片段。要导航到选项卡中的新片段,我一直在使用以下代码(根据文档,这似乎是正确的):
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(containerId, newFragment);
ft.addToBackStack(null);
ft.commit();
一切都很好,直到我按下后退键导航到上一个片段并意识到我的所有视图状态几乎都被破坏了。发生的事情是 onCreateView() 方法再次被调用我之前的片段,即使它的视图之前已经创建过......这是为什么呢?我已经搜索了如何正确维护片段的状态,但我似乎找不到合适的文档。
然后我尝试的是使用
ft.add(containerId, newFragment);
而不是
ft.replace(containerId, newFragment);
这实际上工作得很好,因为我的视图状态被保留了 - 每次显示我以前的片段时都不会调用 onCreateView()。然而,我开始注意到我可以与位于当前片段下方的先前片段中的组件(按钮等)进行交互,即使我看不到这些组件!?我在某处读到应该使用以下方法来保存某些状态:
public void onSaveInstanceState (Bundle outState)
我实现了这个方法,但是它从来没有被调用过!我还注意到,传递给 onCreateView() 和 onActivityCreated() 方法的包始终为空。当然,谷歌并没有让实现这样的目标变得如此困难,我一定错过了什么?任何有关如何正确维护片段视图状态的帮助将不胜感激!
谢谢。
【问题讨论】:
-
还有其他人经历过这种情况吗?请帮忙! :)
-
好的,所以看起来视图状态问题不是简单地在片段之间导航时的问题,而是涉及另一个活动时......请查看我记录的错误(问题 20120):@ 987654322@