使用导航组件导航到自身时如何显示后退按钮?

时间:2020-09-30 00:06:59

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

我已经这样设置了导航栏

with(ActivityHolderBinding.inflate(layoutInflater)) {
        setContentView(root)
        val fragment = supportFragmentManager.findFragmentByTag("holder") as NavHostFragment
        toolbar.setupWithNavController(fragment.navController,AppBarConfiguration(fragment.navController.graph))
        setSupportActionBar(toolbar)
    }

但这仅在我导航到另一个片段时显示一个后退按钮,而在我标记为开始目标的片段上导航到自身时则不显示。

1 个答案:

答案 0 :(得分:0)

根据this issue

setupActionBarWithNavController使用当前的目标ID来确定是否显示了“向上”按钮,因此您看到的行为按预期进行。

您可以有多个使用同一Fragment类的目标,因此只需为递归调用创建一个单独的目标即可:

<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/catalog_nav_graph"
    app:startDestination="@id/categories">

    <fragment
        android:id="@+id/categories"
        android:name="somepackage.categories.CategoryListFragment"
        tools:layout="@layout/catalog_category_list_frag">

        <action
            android:id="@+id/action_category_to_category"
            app:destination="@id/categoriesRecursive" />

        <action
            android:id="@+id/action_category_to_product_list"
            app:destination="@id/products_frag" />

        <argument
            android:name="categoryId"
            app:argType="integer"
            android:defaultValue="0" />

    </fragment>
    <fragment
        android:id="@+id/categoriesRecursive"
        android:name="somepackage.categories.CategoryListFragment"
        tools:layout="@layout/catalog_category_list_frag">

        <action
            android:id="@+id/action_category_to_category"
            app:destination="@id/categoriesRecursive" />

        <action
            android:id="@+id/action_category_to_product_list"
            app:destination="@id/products_frag" />

        <argument
            android:name="categoryId"
            app:argType="integer"
            android:defaultValue="0" />

    </fragment>
    ....
</navigation>

因此,通过使用两个不同的ID,NavigationUI可以区分您的第一级(不应显示向上箭头)和应该显示向上箭头的第一级。