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

时间:2011-09-16 14:11:49

标签: android android-fragments

  

可能重复:
  Separate Back Stack for each tab in Android using Fragments

我最近开始在FragmentActivity中的标签主机内部开发一个带有片段的应用程序。由于TabActivity类现已弃用,因此Android文档说这样做。为了使用片段,我使用的是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()方法的bundle总是为null。谷歌肯定没有这么难以实现这样的事情,我必须遗漏一些东西?任何有关如何正确维护片段视图状态的帮助将不胜感激!

感谢。

1 个答案:

答案 0 :(得分:1)

看看这个问题 - 我认为这两个问题可能有关系,你可以解决这个问题。

Separate Back Stack for each tab in Android using Fragments