使用 add() 方法添加片段不会隐藏以前的片段
Posted
技术标签:
【中文标题】使用 add() 方法添加片段不会隐藏以前的片段【英文标题】:Adding a Fragment with add() method doesn't hide previous fragments 【发布时间】:2011-09-07 21:00:53 【问题描述】:我在使用 add() 方法添加新片段时遇到“意外行为”。
我想在 FrameLayout 上添加一个新片段,但是当我这样做时,前一个片段仍然可见。
这是使用 add() 方法时的预期结果吗?
是因为我用的是FrameLayout,add()方法只是在FrameLayout上放一个fragment,不影响前一个?
谢谢
【问题讨论】:
【参考方案1】:不是错误。尝试替换(..)。而是根据需要添加到后台堆栈。
编辑我认为使用replace
或remove() add()
可以解决您的问题,但是正如您在相关的post 中强调的那样,在您的特定情况下会出现一个错误。
【讨论】:
我就是这样做的,但是后来我发现了这个问题:***.com/questions/6229142/…(用replace()添加的新片段在回栈操作后没有被删除) 好吧,这很奇怪。你能发布一些代码。我正在使用兼容性库,它具有能够调试源代码的额外优势,并且正在执行以下操作以毫无问题地从片段 A 加载片段 B:'getActivity().getSupportedFragmentManager().beingTransaction.replace (R.id.details, fragB).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).addToBackStack(null).commit();' 此外,我建议使用兼容性库创建一个简单的应用程序,看看是否可行。如果没有,则对其进行调试以查看发生了什么。基本上,一个片段有一个与之关联的中间活动,当它被删除时(即返回),它应该设置为 null。在调用 replace() 或 add() 时,中间活动的状态决定片段是否被视为已添加。 因为这是一个不同的主题,所以我将代码放在这里:***.com/questions/6250580/… 如您所见,我已经尝试过替换。我没有使用兼容性库,但可能是进行切换的好时机。我有一个容器活动,你的意思是这个活动在片段转换期间改变了他的状态吗?我的容器 Activity 旨在处理一堆片段,我不希望我的 Activity 被删除或受到后退按钮按下的影响,尽管我决定了。或者你在说什么中间活动?谢谢 我建议在 API 演示中查看 FragmentStack.java 的堆栈示例,看看它与您的代码 link 相比有何不同,因为它完全符合您的要求,也许您不应该保留对片段管理器的引用,但每次都使用 getFragmentManager(),我不知道。关于中间活动,底层的 Fragment 有一个与之关联的活动,当 Fragment 被删除时,它被设置为 null 并在添加时被检查(参见兼容性库源代码)。【参考方案2】:你可以做的其他简单的事情就是调用
FragmentTransaction t = getFragmentManager.beginTransaction();
t.hide(<your_fragment>);
t.add(<container, <new_fragment>);
..do the rest here..
t.commit();
如果这有帮助,请告诉我。
【讨论】:
以上是关于使用 add() 方法添加片段不会隐藏以前的片段的主要内容,如果未能解决你的问题,请参考以下文章