Навигация по компонентам NavigationComponent внутри BottomSheetDialogFragment - PullRequest
2 голосов
/ 27 января 2020

Может ли Android Навигационный компонент использоваться для навигации ВНУТРИ BottomSheet (т.е. замена / добавление фрагментов в пределах одного нижнего листа)?

Я знаю, как запустить BottomSheetDialogFragment, используя тег <dialog> в навигационном графике. Например, приведенный ниже nav_graph.xml позволяет пользователю перемещаться от одного BottomSheetDialogFragment (фрагмент-одно) к другому BottomSheetDialogFragment (фрагмент-два). FragmentTwo открывается как второй BottomSheet поверх BottomSheet FragmentOne.

Однако что, если я захочу, чтобы fragTwo заменил фрагментOne В ТЕМ ЖЕ BottomSheet? Как бы я выполнил sh это с помощью навигационного графика?

<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>

Демонстрация (это не то, что я хочу. Я не хочу, чтобы нижний лист открывался поверх другого bottomSheet

image

1 Ответ

0 голосов
/ 27 января 2020

A NavHostFragment - это контейнер, который заменяет свое содержимое. Поэтому, если вы хотите, чтобы в вашем BottomSheetDialogFragment был контейнер, который отделен от внешнего NavHostFragment контейнера (т. Е. Контейнера, в котором содержится все содержимое вашей деятельности), вы захотите добавить отдельный NavHostFragment в макете вашего BottomSheetDialogFragment со своим собственным графом навигации.

Тогда навигация в этом меньшем контейнере заменит только содержимое на нижнем листе (и вы будете использовать requireParentFragment().findNavController() для доступа к external NavController, если вы хотите выполнить операцию navigate() на внешнем уровне).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...