【问题标题】:Android Fragments Backstack: Is it a stack of Fragments or transactions?Android Fragments Backstack:是Fragments堆栈还是事务堆栈?
【发布时间】:2014-12-04 03:35:17
【问题描述】:

来自developers guide

当你执行这样一个片段事务时,你也可以将它添加到一个 由 Activity 管理的回栈——每个回栈条目 活动是发生的片段事务的记录。这 回栈允许用户撤销片段交易(导航 向后),按“后退”按钮。

这是Backstackstack fragments 还是某种transaction 记录?

因为如果它是fragmentsstack,并且删除了fragment(我想这意味着从backstack 中弹出),反向导航将如何添加回弹出的片段在stack之外?

然后在同一个文档中,

使用 popBackStack() 将 fragments 从后台堆栈中弹出 ...

这表明它是fragments 的stack

那么Fragmentbackstack stack 包含什么、片段或交易记录? 如果是前者,那么如何在反向导航时撤销删除事务?

【问题讨论】:

    标签: android android-fragments transactions stack back-stack


    【解决方案1】:

    这个Backstack是一堆片段还是某种交易记录?

    一个stack 的片段。

    如果是前者,那么在返回导航时如何撤销删除事务?

    Fragments 中,您可以将片段添加到BackStack(它不会像activity 那样自动添加到BackStack) - 您在删除fragment 之前,有这样做的选项

    只有当您在删除片段的事务期间通过调用addToBackStack() 明确请求时,才会将Fragment 添加到BackStack

    这样,它就会被添加到 backstack 中,当用户向后导航时,最后添加的 Fragment 会出现在 backstack 的顶部。

    【讨论】:

      【解决方案2】:

      我想你可能只是读得太多了。

      是的,backstack 是片段的stack。当您开始一项新活动或提交一个片段事务时,您要离开的那个将默认添加到堆栈中。通过这种方式,您可以创建一个按时间顺序排列的您所经历的片段列表。

      您提供的报价的意思是“活动中的每个返回堆栈条目都是发生的片段事务的记录”是每个新片段都添加到片段事务中,因此您有一堆以前的片段也就是说,在某种程度上,你所经历的事情的记录。

      在后退导航中,片段只是从堆栈中弹出并放回屏幕上,实际上是让您从原来的位置向后移动。

      【讨论】:

      • 谢谢,但假设用户关闭了一个对话框片段。那么那里发生了什么,对话框片段是否从堆栈中弹出?
      • 你可以在这里阅读:developer.android.com/reference/android/app/DialogFragment.html 只需按 ctrl+f 并输入“back stack” - 我会解释它,但从源代码阅读它比让我解释它更容易.
      猜你喜欢
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      相关资源
      最近更新 更多