【问题标题】:Building fragment stack for One Activity Many Fragment App为一个活动多片段应用程序构建片段堆栈
【发布时间】:2016-05-19 04:28:39
【问题描述】:

我的应用只有一个活动很多片段

在我的 activty 的 XML 中,我只有一个 FrameLayout,我在其上替换/添加/隐藏/显示各种片段。

想象Fragment A 是用户打开应用时看到的第一个片段。

单击Fragment A 中的某些内容以启动Fragment B,然后单击Fragment B 中的某些内容以启动Fragment C

所以导航可以如下图所示:

片段 A --> 片段 B --> 片段 C

我想启动应用程序并直接从通知中显示Fragment C

但是,如何从Fragment C 提供返回导航,因为点击返回将转到Fragment B,再次单击返回转到Fragment A

即如何注入以下堆栈结构?

片段 A

【问题讨论】:

    标签: android android-fragments stack android-notifications up-navigation


    【解决方案1】:

    是的,您可以这样做。由于支持库 v26,您可以使用片段构建堆栈而无需大量成本。 在您的活动中进行以下操作:

        getSupportFragmentManager().beginTransaction()
                .replace(R.id.container, new FragmentA())
                .addToBackStack("fragmentA")
                .setReorderingAllowed(true)
                .commit();
    
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.container, new FragmentB())
                .addToBackStack("fragmentB")
                .setReorderingAllowed(true)
                .commit();
    
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.container, new FragmentC())
                .addToBackStack("fragmentC")
                .setReorderingAllowed(true)
                .commit();
    

    请记住,由于 setReorderingAllowed,在按下 FragmentC 后,FragmentA 和 FragmentB 的行为方式会有所不同。 FragmentA 和 FragmentB 入栈后不会调用 onCreateView,只有 FragmentC 会调用 onCreateView。对于 FragmentA 和 FragmentB,只会调用 onCreate。

    【讨论】:

      【解决方案2】:

      你能做的是—— 使用传递字符串的通知意图。在您的主要活动中,如果您收到该字符串,请制作 A、B 和 C 的片段堆栈。 否则,如果你没有得到意图,就继续你的流程。

      【讨论】:

      • “制作 A、B 和 C 的片段堆栈”这是我的问题,我该怎么做?从通知启动应用程序时,有多种方法可以创建活动堆栈,以保持导航完整性。
      • 添加回栈方法-final FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.frame_content,fragmentB); ft.addToBackStack("fragB"); ft.commit();然后对于片段 c
      • 对不起,这不是堆栈注入。这通常是一个一个地添加片段。它将导致用户看到 A 、B 和 C 被一一添加。
      • 在 onStart 中执行此操作。用户在简历被调用时只看到一次 Ui。
      猜你喜欢
      • 1970-01-01
      • 2019-04-24
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2016-10-21
      • 1970-01-01
      相关资源
      最近更新 更多