【问题标题】:Prevent last Fragment from being removed from backstack防止最后一个 Fragment 从 backstack 中移除
【发布时间】:2017-05-04 17:05:46
【问题描述】:

我目前正在编写一个抽屉布局作为我的主要布局,当点击抽屉上的一个项目时,我将使用嵌入的 FrameLayout 来保存每个“页面”。当应用程序第一次启动时,将显示一个初始片段。稍后可以添加/替换其他片段,这很好,但是,我的问题是当用户单击第一个“初始片段”上的后退按钮时,我不希望从布局中删除该特定片段。目前,它正在被删除,它只是显示一个没有其他内容的抽屉布局(这是有道理的)。如果初始片段是最后一个显示并且按下后退按钮,我希望应用程序自动退出,而不是删除该初始片段,然后在再次按下后退出。

我想过要做的事情:

  • 不将第一个片段添加到后台堆栈。 (如果我这样做,我可以将它与片段的类名进行比较,它是一个稍长的字符串,或者我可以使用一个布尔值,一旦第一个片段被放置(而不是添加到后台堆栈),布尔值被设置现在允许添加片段。
  • 覆盖活动的 onBackPressed 函数

有没有人有建议的方法或可以想到更好的方法?谢谢

【问题讨论】:

  • 我建议第一个选项,即不将片段添加到后台
  • 我建议覆盖 onBackPressed 并且只有在 frsgment 堆栈中有条目时才返回

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


【解决方案1】:

第一个要点听起来最干净。当背部被击中时,您不需要处理其他情况,对吗?如果是这种情况,代码行数就会减少(删除一行而不是添加几行),并且您可以保持默认的 Activity 方法不变。

我知道你问的不是这个,但我认为第一个要点很清楚,我不会尝试其他的。

【讨论】:

  • 实际上,这就是我要问的问题,我认为这很有帮助。等待接受答案,看看是否还有其他问题。谢谢
【解决方案2】:

我已经在其中一个应用程序中使用我自己的 Stack of Fragment 实现了相同的功能。并且还实现了 onBackPressed 方法。

每当用户点击抽屉中的项目时,我都会在堆栈中添加片段,一旦它的长度为 1,我会在后按中添加消息完成活动。

点击项目 -- 在容器中添加/替换片段。

OnBackPressed -- 从堆栈中弹出片段,一旦最后一个片段我完成活动。

希望这可以为您提供另一种选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-18
    • 2023-04-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多