android - 保留 fragment 供以后显示的最佳实践

标签 android android-fragments android-fragmentactivity android-support-library

我有一个包含 FrameLayout 的 Activity 。 该 Activity 应显示四个步骤,每个步骤都是一个 Fragment。当我想回到更远的地方时,我不希望我的 fragment 被重新创建。我想保留它们并简单地在我的 fragment 中替换它们的 View 。

我过去常常先创建我的 fragment ,然后像这样将它们添加到后台堆栈中:

Fragment step= new Frag1ActCompleteFragsCommTrack();
FragmentTransaction ft= getSupportFragmentManager().beginTransaction();
ft.add(step, ""+onStepNr);
ft.addToBackStack(null);
ft.commit();

请注意,我没有显示它,我只是创建它并添加到后台堆栈。

所以,一旦我需要显示一个 fragment ,我就添加它(在这个例子中,我没有从 framelayout 中删除任何 fragment ,只是因为它是我的第一个添加):

FragmentTransaction ft= getSupportFragmentManager().beginTransaction();
ft.add(R.id.my_frameLayout, step);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();

所以:问题是我获得了一个

Caused by: java.lang.IllegalStateException: Fragment already added: Frag1ActCompleteFragsCommTrack{410dcb20 #0 id=0x7f050041 -1}

但我想我不能第一次直接添加到我的框架布局中,否则下次我替换它时,我可能会丢失我的 fragment 。我对吗?那么.. 保留可以在框架布局中相互交换的 fragment 的最佳做法是什么?

最佳答案

女士们先生们,我做到了!

如果你添加了一个Fragment,并且你希望它显示在一个framelayout中,记得把它放在Fragment backstack中。而已!如果你在框架布局中用另一个替换它,不用担心:你可以通过它的标签找到它把它放回去。 实际上比我想象的要容易

//step is an int describing the step associated to the fragment I wanna place
FragmentTransaction ft= getSupportFragmentManager().beginTransaction();
ft.replace(R.id.act_complete_track_frameLayout, f, ""+step);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
if(firstAttach)
    ft.addToBackStack(null);
ft.commit();

想象一个带有标签“1”的 fragment 通过上面的代码被一个带有标签“2”的 fragment 替换。如果我想回到第 1 步,我会通过使用 getSupportFragmentManager().findFragmentByTag("1")

获取我的旧 fragment 来重用该代码

简而言之,我认为 FragmentTransaction.replace 也从后台堆栈中删除了 fragment。事实并非如此(幸运的是)

关于android - 保留 fragment 供以后显示的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17158712/

相关文章:

android - 由服务扩展的类 Activity 问题

java - 访问 fragment 中的 Activity 变量

android - 在 Eclipse 中手动设置 JDK 路径

android - Button 类型未定义方法 setX(float)

java - 如何让我的代码从食品店随机生成的数字中进行选择?

android - 改变 Activity 的微调监听器

Activity 选项卡内的 Android 主细节布局避免嵌套 fragment

java - Android 在应用程序暂停后询问 findViewById 时返回 NullPointerException

安卓 : Hide RelativeLayout with animationwhen scroll down/up listview

java - Android - 将数据保存到内部存储