如何保持父片段的状态

时间:2015-03-05 18:05:32

标签: android android-fragments nested savestate

我有一个片段,我有一个嵌套片段。我附上了一张图片来说明。所以我有一个嵌套的孩子,当我点击按钮1时,我用子B替换孩子A,然后在按钮2上单击我用子C替换孩子B.现在当我点击按钮3时,我替换父母(片段1与片段2),这就是我想要做的。

当我在片段2上点击后退按钮时,我弹出后台并显示片段1,问题是孩子A显示,当我从片段2到片段时,我需要弄清楚如何显示子c 1。  我还需要提一下,子c包含在网格视图中显示的测试结果。有人可以帮我这么做吗?

修改

以下是我用于子片段交易的代码(按钮1和按钮2点击)

 protected void nextNestedFragment(Fragment nestedFragment){
        FragmentTransaction ft = getParentFragment().getChildFragmentManager().beginTransaction();
        ft.setCustomAnimations(R.animator.enter_slide_in,R.animator.enter_slide_out,R.animator.close_slide_in, R.animator.close_slide_out);
        ft.replace(R.id.nested_fragment_container, nestedFragment).addToBackStack(null).commit();    
    }

所以对于上面的内容,我传入下一个片段,我希望导航到父片段中。下面是我在按钮3上使用的代码,用于从片段1导​​航到片段2:

  protected void nextFragment(Fragment nextFrag){
        FragmentTransaction ft = getParentFragment().getFragmentManager().beginTransaction();
        ft.setCustomAnimations(R.animator.enter_slide_in,R.animator.enter_slide_out,R.animator.close_slide_in, R.animator.close_slide_out);
        ft.replace(R.id.fragment_container, nextFrag).addToBackStack(null).commit();
    }

enter image description here

1 个答案:

答案 0 :(得分:1)

首先,你需要知道,你有两个不同的FragmentManager(默认的一个,和ChildFragmentManager),每个都有它自己的后栈。当您按下后退按钮时,弹出第一个FragmentManager的后堆栈,显示片段1。

其次,当从后面的堆栈onCreateView弹出片段1时,调用该片段。而且我很确定你在里面创建了一个有孩子A的视图。

您需要做的是保存Fragment的状态。这里有很多关于如何正确执行此操作的问题。从here开始。