【问题标题】:android show next fragment before popping backstackandroid在弹出回栈之前显示下一个片段
【发布时间】:2015-02-14 11:34:34
【问题描述】:

我有几个片段不断相互替换(事务添加到后台堆栈)。根据用户在某些时候的操作,我需要清除所有(或部分)以前的片段并只显示 1 个新片段。

为此,我目前先执行popBackStack() 以清除它们,然后执行replace(),这可以按预期工作。然而,有时在我们看到新片段之前,前一个片段会闪现。我认为这是因为我在显示新片段之前先弹出了 backstack。

所以我只是想知道是否有一种简单的方法可以先显示新片段,然后清除以前事务的后台堆栈?

【问题讨论】:

    标签: android android-fragments back-stack fragment-backstack


    【解决方案1】:

    编辑:你是对的,这是因为你在添加片段之前从后台堆栈中删除。

    如果您不需要后台堆栈上的新片段,您可以在单个事务中首先添加新片段,然后在事务后从后台堆栈中弹出其余片段。 (或者如果你确实需要它,从后面的堆栈中删除所有片段,除了新添加的片段)

    此外,如果您只调用 replace(R.id.containter, new Fragment(), TAG) 所有添加到容器的片段都将被新片段替换。 (也可以手动清空后栈)

    这两种解决方案都应该删除您有时看到的闪存,因为在您的情况下,您在添加新的之前开始删除片段,因此您可以看到旧的片段自行删除。

    如果问题仍然存在,您可以尝试在新片段附加到活动并显示自身后清除您的回栈(但我认为没有必要,我尝试了上述解决方案,我称之为添加片段首先弹出整个后栈)

    【讨论】:

    • 如果您只想在某些情况下弹出前一个(或“n”)片段,该怎么做?当我在添加新片段后 popBackStack() 时,新片段永远不会显示。
    • 这需要一些工作,但这里是您需要实施的解决方案才能达到效果。 stackoverflow.com/questions/21665346/…
    • 但是在您尝试之前,您是否在片段交易中设置了自定义动画?
    • 是的,我打算添加动画,这就是为什么我首先要寻找正确的方法来清除它。 :)
    • 好吧,我认为闪光灯会在这种情况下消失。如果你说前任。往back stack中添加几个fragment,然后popbackStack(null, INCLUSIVE)调用replace,你会看到最后一个fragment离开,新的进入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多