选项卡主机中的Android Fragment视图状态

Ste*_*son 6 android android-fragments

可能重复:
使用片段为Android中的每个选项卡分隔后台堆栈

我最近开始在FragmentActivity中的标签主机内部开发一个带有片段的应用程序.由于TabActivity类现已弃用,因此Android文档说这样做.为了使用片段,我使用的是android v4支持库.

目前我的应用程序包含一个选项卡,其中存在片段.要导航到选项卡中的新片段,我一直在使用以下代码(根据文档似乎是正确的):

FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(containerId, newFragment);
ft.addToBackStack(null);
ft.commit();
Run Code Online (Sandbox Code Playgroud)

一切顺利,直到我按下后退键导航到前一个片段并意识到我的所有视图状态几乎都被破坏了......发生的事情是onCreateView()方法在我之前的片段上再次被调用即使之前已经创建了它的观点......为什么会这样?我已经四处搜索了如何使用片段正确维护状态,但我似乎无法在此找到合适的文档.

然后我尝试使用的是

ft.add(containerId, newFragment);
Run Code Online (Sandbox Code Playgroud)

代替

ft.replace(containerId, newFragment);
Run Code Online (Sandbox Code Playgroud)

这实际上工作得很好,因为我的视图状态被保留了 - 每次显示我之前的片段时都没有调用onCreateView().然而,我接着注意到的是,我可以与位于当前片段下方的先前片段的组件(按钮等)进行交互,即使我看不到组件!?我在某处读到应该使用以下方法来保存一些状态:

public void onSaveInstanceState (Bundle outState)
Run Code Online (Sandbox Code Playgroud)

我实现了这个方法,但它从未被调用过!我还注意到,过去onCreateView()和onActivityCreated()方法的bundle总是为null.谷歌肯定没有这么难以实现这样的事情,我必须遗漏一些东西?任何有关如何正确维护片段视图状态的帮助将不胜感激!

谢谢.

Ric*_*ier 1

看看这个问题 - 我认为两者可能相关,您也许可以解决这个问题。

使用 Fragments 为 Android 中的每个选项卡单独的返回堆栈