多个导航图应用 popbackstack 不起作用

Multiple navigation graph app popbackstack does not work

我目前正在开发一个使用 android 导航组件的应用程序。 该应用程序具有多个导航图,可满足应用程序中不同导航的需求。

用户登录应用,该应用使用底部导航,底部导航栏有 5 个导航图。

然后,用户可以从设置选项卡中注销应用程序。但是,当我按下后退按钮时,我将返回到设置屏幕。

设置导航图如下所示:

<?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/settings_graph"
    app:startDestination="@id/settingsFragment">

<fragment
    android:id="@+id/settingsFragment"
    android:name="zw.myexample.ui.SettingsFragment"
    tools:layout="@layout/settings_data">

    <action
        android:id="@+id/action_settingsFragment_to_loginActivity"
        app:destination="@id/toLoginActivity"
        app:popUpTo="@id/login_navigation"
        app:popUpToInclusive="true"/>
</fragment>

<activity
    android:id="@+id/toLoginActivity"
    android:name="zw.myexample.ui.LoginActivity"
    tools:layout="@layout/activity_login" />

</navigation>

在我的注销功能中,我有以下内容:

findNavController().navigate(R.id.action_settingsFragment_to_loginActivity)
findNavController().popBackStack()

这似乎不起作用,我已经尝试了下面列表中的多个建议:

我发现您正在从一个 activity(包含 setting_fragment)转移到另一个 activity(包含登录片段)。在这种情况下,您可以在使用新任务清除顶部后开始您的 login_activity。

我创建了这个你可以使用的扩展函数:

fun <T : AppCompatActivity> Fragment.gotoActivityWithNoBackUp(targetActivityClass: Class<T>) {
    val intent = Intent(requireActivity(), targetActivityClass)
      .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
      .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
      .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    requireActivity().finish()
    startActivity(intent)
}

然后在您的注销按钮中单击,复制此代码:

gotoActivityWithNoBackUp(LoginActivity::class.java)