【问题标题】:Remove a fragment which is not put to stack in my case删除在我的情况下未放入堆栈的片段
【发布时间】:2012-03-30 19:31:17
【问题描述】:

假设我有两个片段:firstFragmentsecondFragment

我知道我可以通过以下方式替换片段:

fragmentTransaction.replace(R.id.fragment_placeholder, firstFragment);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.commit();

如上面的代码所示,我没有将上面的firstFragment 添加到back stack

然后,我用secondFragment替换,但这一次,我将secondFragment添加到back stack

fragmentTransaction.replace(R.id.fragment_placeholder, secondFragment);
fragmentTransaction.addToBackStack(null); //add to back stack
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.commit();

在我的手机屏幕上,它现在显示secondFragment

我的问题是,如何删除 添加到 back stackfirstFragment

【问题讨论】:

    标签: android android-layout android-intent android-emulator android-fragments


    【解决方案1】:

    分离片段后,片段将被销毁。要确保您的片段仍在布局中,您可以使用“层次结构查看器”透视图。要使用层次结构查看器,您必须使用模拟器或有根设备。 (http://developer.android.com/guide/topics/fundamentals/fragments.html#Creating)

    但是,如果您使用 android-support-v4.jar 来支持 1.6 及更高版本,请确保您没有在 xml-layout 中定义任何片段。使用 android-support-v4.jar 时无法删除 xml-layout 中的片段。就这样做吧,如果你使用会一直显示的片段(例如导航)

    编辑:替换也应该删除第一个片段。 Replace 将用给定的片段替换容器内的所有子元素。

    【讨论】:

      【解决方案2】:

      你可以detach ui 中的第一个片段。请参阅文档以获取更多参考

      或者你可以试试remove

      编辑:站在文档前:

      如果您在执行删除片段的事务时不调用 addToBackStack(),则该片段会在事务提交时被销毁,并且用户无法导航回它。

      所以我认为你需要的是调用 remove。

      【讨论】:

      • 分离是指从内存中删除片段还是只是隐藏它?
      • 我认为它会隐藏..我认为它更像是将它添加到后台
      • 在 fragmenttransaction 上你也有 remove 方法
      猜你喜欢
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多