0

我有一个类似于 Android Studios 的应用程序Navigation Drawer Activity

我的活动使用 Android 架构导航组件和导航抽屉在不同片段之间导航。由于导航抽屉非常自定义,我不能使用通常的导航视图,而是使用托管LinearLayout. LinearLayout 中的每个项目都有一个 onClickListener 归结为

navController.navigate(R.id.myCorrespondingFragment)

到目前为止,一切正常。导航返回时问题开始:

假设我从“主页”-片段 A -> B -> C 导航,然后返回。

Android Studios 示例行为正确:C -> A -> 关闭

我的实现没有:它只是弹出回栈 C -> B -> A -> close

我该如何解决?


缩小的主布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout  android:id="@+id/drawerLayout" >

    <LinearLayout android:orientation="vertical" >

            <androidx.appcompat.widget.Toolbar  android:id="@+id/toolbar" />
        
        <fragment
            android:id="@+id/container"
            android:name="androidx.navigation.fragment.NavHostFragment"
            app:defaultNavHost="true"
            app:navGraph="@navigation/nav_graph"
            />

    </LinearLayout>

    <fragment
        android:name="com.company.drawer.DrawerFragment"
        android:layout_gravity="start"
        />

</androidx.drawerlayout.widget.DrawerLayout>

导航图:

<?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"
    android:id="@+id/navigation_graph"
    app:startDestination="@id/doorFragment"
    >

    <fragment
        android:id="@+id/doorFragment"
        android:name="com.company.door.DoorFragment"
        android:label="@string/shared_empty"
        />

    <fragment
        android:id="@+id/historyFragment"
        android:name="com.company.history.HistoryFragment"
        android:label="@string/history"
        />

    <fragment
        android:id="@+id/settingsFragment"
        android:name="com.company.settings.SettingsFragment"
        android:label="@string/settings"
        />
</navigation>

与我的主要活动相关的所有导航onCreate

setSupportActionBar(toolbar)     
val navController = (supportFragmentManager.findFragmentById(R.id.container) as NavHostFragment).navController
toolbar.setupWithNavController(navController, AppBarConfiguration(
    listOf(R.id.doorFragment, R.id.historyFragment, R.id.settingsFragment)
    , drawerLayout
))
4

1 回答 1

0

你可以这样尝试

<fragment
android:id="@+id/fragmentA"
android:name="com.package.FragmentA"
android:label="Fragment A">

<action
    android:id="@+id/action_fragmentA_to_fragmentB"
    app:destination="@id/fragmentB"
    app:popUpTo="@id/fragmentB"
    app:popUpToInclusive="true / false" />
</fragment>
于 2021-04-07T11:34:52.300 回答