11

Android 的导航组件可以用于在底部表内导航(即在单个底部表中替换/添加片段)吗?

我知道如何在导航图中BottomSheetDialogFragment使用标签启动。<dialog>例如,下面nav_graph.xml允许用户从一个BottomSheetDialogFragment(fragmentOne) 导航到另一个BottomSheetDialogFragment(fragmentTwo)。FragmentTwo 在 FragmentOne 的 BottomSheet 上作为第二个 BottomSheet 打开。

但是,如果我想让 fragmentTwo 在同一个 BottomSheet 中替换 fragmentOne 怎么办?我将如何使用导航图完成此操作?

<navigation android:id="@+id/nav_graph"
        app:startDestination="@id/fragmentOne">

    <dialog android:id="@+id/fragmentOne"
        android:name="com.example.navcomponentapp.FragmentOne"
        android:label="fragment_fragment_one"
        tools:layout="@layout/fragment_fragment_one">

        <action android:id="@+id/action_fragmentOne_to_fragmentTwo2"
            app:destination="@id/fragmentTwo"/>
    </dialog>

    <dialog android:id="@+id/fragmentTwo"
        android:name="com.example.navcomponentapp.FragmentTwo"
        android:label="fragment_fragment_two"
        tools:layout="@layout/fragment_fragment_two"/>
</navigation>

演示(这不是我想要的。我不想要一个底部表打开另一个底部表

4

1 回答 1

5

ANavHostFragment是替换其内容的容器。因此,如果您想在您的容器中有一个BottomSheetDialogFragment与外部容器分开NavHostFragment的容器(即,您的活动的全部内容的容器),您需要NavHostFragment在您的布局中添加一个单独的BottomSheetDialogFragmentwith它自己的导航图。

然后在那个较小的容器中导航只会替换底部表中的内容(如果您想在外部级别进行操作,您可以使用requireParentFragment().findNavController()访问外部)。NavControllernavigate()

于 2020-01-27T04:53:50.293 回答