【问题标题】:Android Jetpack Navigation component issue with splash fragment as root destinationAndroid Jetpack Navigation 组件问题,将启动片段作为根目的地
【发布时间】:2018-09-27 12:54:26
【问题描述】:

假设我们有 3 个带有向上按钮功能的工具栏的片段

SplashFragment -> FragmentA -> FragmentB 

这是应用程序的预期流程。当用户按下返回按钮时到达 FragmentB 时,他应该转到 FragmentA 并再次按下返回按钮时应用程序应该退出。 我们如何使用导航组件来实现这种行为? 我曾尝试使用action 标签内的app:popUpTo 来做到这一点,不知何故我设法使它适用于硬件后退按钮,但向上按钮的行为没有改变。

在这方面需要帮助。

【问题讨论】:

  • 你有什么解决办法吗??

标签: android kotlin android-navigation android-jetpack android-architecture-navigation


【解决方案1】:

警告:这在 Navigation alpha08 上已弃用,而link 是当前的解决方案。

这可能是您想要的答案。 使用app:clearTask="true"

<fragment
    android:id="@+id/splashFragment"
    android:name="xxx.SplashFragment"
    android:label="fragment_splash"
    tools:layout="@layout/fragment_splash">
    <action
        android:id="@+id/action_splashFragment_to_mainFragment"
        app:destination="@id/mainFragment"
        app:enterAnim="@anim/anim_right_in"
        app:exitAnim="@anim/anim_left_out"
        app:popEnterAnim="@anim/anim_left_in"
        app:popExitAnim="@anim/anim_right_out"
        app:clearTask="true"/>

Navigation Architecture Component - Splash screen

【讨论】:

  • 但是,当前根片段仍然在工具栏上有返回按钮。
【解决方案2】:

您可以尝试这样做:

App 启动后 Fragment-A 清除 backstack 即; SplashFragment ,现在当用户向前导航时,一切都是一样的,但在返回 Fragment-A 后,如果他点击返回按钮,则应用程序退出。

希望这会有所帮助!

【讨论】:

  • 不,那是行不通的。这里说的是导航组件不是普通的fragment事务,我需要更新导航的控制流但是不知道怎么做。
  • 是的,我明白了,您需要以编程方式清除后台堆栈
【解决方案3】:

我有一个类似的流程,什么有效,我相信一个干净的解决方案是让你的 FragmentA 作为你的导航图的起点(在午餐时总是放在后台的顶部)然后你想要(可能有条件地)导航到 onStart 上的 SplashFragment FragmentA(或生命周期的早期),最后当您希望 SplashFragment 消失时,您使用findNavController().popBackStack() 弹出分段。那么只有 Fragment A 和 B 将保留在您的堆栈中,而 back 将按预期工作。

希望这会有所帮助。

【讨论】:

  • 有趣。我正在尝试实现类似的目标。
【解决方案4】:

这是我的解决方案。 fragmentA-&gt;fragmentB-&gt;fragmentc 在后面,从 FragmentC 到 FragmentB 按下按钮,然后再次按下,您想退出表单应用程序。将此行添加到 FragmentA 操作。

app:launchSingleTop="true"
app:popUpTo="@+id/fragmentA"
app:popUpToInclusive="true"

【讨论】:

    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多