【问题标题】:Android: How can you pre-populate the fragment backstack?Android:如何预先填充片段回栈?
【发布时间】:2015-01-22 22:56:21
【问题描述】:

我有一个应用程序,它有一个加载片段的 Activity……在初始启动时它加载片段 A。用户可以从 A 导航到片段 B;并从 B 导航到片段 C。每次替换片段时,我都会执行 addToBackStack。后退按钮按预期导航,C 到 B 到 A,如果您再次按下后退,应用程序将退出。

我还使用 Dropbox 数据存储来保存我的所有应用数据,以便我可以在设备之间无缝移动并同步我的所有数据。这似乎运作良好。作为我数据的一部分,我存储最后显示的片段。现在,当我的应用程序在第二台设备上启动时,它会正确显示最近打开的片段。这很好用,但是,我不再有后备箱。例如,如果应用程序显示片段 C 设备一,然后我在设备二上启动应用程序,正如预期的片段 C 显示在设备二上。但是当我按下后退按钮时,应用程序退出而不是显示片段 B。(这是有道理的,因为在设备 2 上,应用程序只加载了片段 C。)

所以我的问题是:如何预先填充我的 baskstack,以便在按下设备 2 上的后退按钮时,它会导航到片段 B?

【问题讨论】:

    标签: android navigation back-stack


    【解决方案1】:

    查看TaskStackBuilder 或活动XML 声明android:parentActivityName

    【讨论】:

      【解决方案2】:

      解决了这个问题,只需提交多个片段事务。为我工作

      supportFragmentManager.beginTransaction().replace(R.id.content, Fragment1(), "f1").addToBackStack(null).commit()
      supportFragmentManager.beginTransaction().replace(R.id.content, Fragment2(), "f2").addToBackStack(null).commit()
      supportFragmentManager.beginTransaction().replace(R.id.content, Fragment3(), "f3").addToBackStack(null).commit()
      supportFragmentManager.beginTransaction().replace(R.id.content, Fragment4(), "f4").commit()
      

      但是,对于更清洁和更好的解决方案,您还可以查看Jetpack Navigation UI

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-12
        • 2014-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多