【问题标题】:How To Trigger Back Button To Go To Home Screen After Multiple Fragment Android如何在多个 Fragment Android 后触发返回按钮返回主屏幕
【发布时间】:2021-08-09 16:32:32
【问题描述】:

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

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

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

在初始设置片段中,有一个检查用户是否设置了一个帐户。如果是这样,用户将被重定向到 Home Fragment。

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

到目前为止,我的理解是我需要从 backstack 中删除那些 Initial Fragment 和 Login 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>

那么我需要改变什么?

提前谢谢你

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

【问题讨论】:

    标签: android kotlin android-fragments


    【解决方案1】:

    由于您使用的是 Jatpack Navigation,因此here 已通过示例和练习进行了说明。

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

    【讨论】:

    • 谢谢。您提供的链接非常有用!
    • 不客气。如果有帮助,我将不胜感激将问题标记为已接受。祝你好运,不要放弃!
    猜你喜欢
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2022-10-23
    • 2020-09-23
    • 1970-01-01
    • 2019-03-31
    相关资源
    最近更新 更多