如何在多个片段后触发后退按钮转到主屏幕 Android

How To Trigger Back Button To Go To Home Screen After Multiple Fragment Android

所以我正在构建一个具有如下导航功能的应用程序:

登录片段(开始目的地)-> 初始设置片段-> 主页片段。

在 Login Fragment 中,检查用户是否使用 SharedPreference 登录。如果是这样,用户将被重定向到初始设置。

在Initial Setting Fragment中,有一个检查用户是否已经设置了一个帐户。如果是这样,用户将被重定向到 Home Fragment。

我想问的是,例如,我正在登录应用程序,我将被重定向到初始设置片段。因为我已经设置了帐户,应用程序将我重定向到 Home Fragment。那么,如何触发后退按钮转到主屏幕而不是上一个片段(初始片段)?

到目前为止我的理解是我需要从后台删除那些初始片段和登录片段。我尝试在我的 navigation.xml 上设置 PopUp Behavior,但仍然不起作用。

这是navigation.xml

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/navigation"
    app:startDestination="@id/loginFragment">

    <fragment
        android:id="@+id/loginFragment"
        android:name="com.main.netwallet.login.LoginFragment"
        android:label="fragment_login"
        tools:layout="@layout/fragment_login" >
        <action
            android:id="@+id/action_loginFragment_to_registerFragment"
            app:destination="@id/registerFragment" />
        <action
            android:id="@+id/action_loginFragment_to_initialSettingFragment"
            app:destination="@id/initialSettingFragment" />
        <action
            android:id="@+id/action_loginFragment_to_homeFragment"
            app:destination="@id/homeFragment" />
    </fragment>
    <fragment
        android:id="@+id/registerFragment"
        android:name="com.main.netwallet.register.RegisterFragment"
        android:label="fragment_register"
        tools:layout="@layout/fragment_register" >
        <action
            android:id="@+id/action_registerFragment_to_initialSettingFragment"
            app:destination="@id/initialSettingFragment" />
    </fragment>
    <fragment
        android:id="@+id/homeFragment"
        android:name="com.main.netwallet.home.HomeFragment"
        android:label="fragment_home"
        tools:layout="@layout/fragment_home" >
        <action
            android:id="@+id/action_homeFragment_to_loginFragment"
            app:destination="@id/loginFragment"
            app:popUpTo="@id/initialSettingFragment"
            app:popUpToInclusive="false" />
    </fragment>
    <fragment
        android:id="@+id/initialSettingFragment"
        android:name="com.main.netwallet.initialSetting.InitialSettingFragment"
        android:label="InitialSettingFragment"
        tools:layout="@layout/fragment_initial_setting">
        <action
            android:id="@+id/action_initialSettingFragment_to_homeFragment"
            app:destination="@id/homeFragment"
            app:popUpTo="@id/loginFragment"
            app:popUpToInclusive="true" />
    </fragment>
</navigation>

那么我需要改变什么?

提前致谢

PS。我也使用 findNavController.navigate(FragmentDirections.androidIdAction) 而不是 (R.id.fragmentId)

因为您使用的是 Jatpack Navigation here 一切都通过示例和练习进行了解释。

另外,为了给您一个小总结,您需要在从一个片段导航到另一个片段时清除您的后台堆栈。 换句话说就是“不要追踪历史”。