ОБНОВЛЕНИЕ: я больше не рекомендую этот подход.Для небольших приложений это может сработать для вас, но я столкнулся с трудностями при попытке передать данные между разными навигационными графами, размещенными в разных NavHostFragments
.Я думаю, что самый простой путь - это «взлом» сокрытия фрагментов в макете верхнего уровня, чтобы обеспечить полноэкранный просмотр.Вы можете добавить addOnDestinationChangedListener
для прослушивания мест назначения, для которых требуется полноэкранный режим, и просто скрыть требуемый фрагмент.
ОРИГИНАЛЬНЫЙ ОТВЕТ: Я делаю это так в своем приложении, и оно работает хорошо.Вы должны обернуть все ваши текущие фрагменты в родительский фрагмент с main_nav_graph.xml
.Например:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/main_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/main_nav_graph" />
</androidx.constraintlayout.widget.ConstraintLayout>
Тогда ваша навигация для полноэкранных фрагментов будет выглядеть следующим образом:
<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/main_nav_graph.xml"
app:startDestination="@id/main_fullscreen">
<fragment
android:id="@+id/main_fullscreen"
android:name="com.example.myapplication.MainFullscreen" >
<action
android:id="@+id/action_main_fullscreen_to_fullscreen2"
app:destination="@id/fullscreen2" />
</fragment>
<fragment
android:id="@+id/fullscreen2"
android:name="com.example.myapplication.Fullscreen2" />
</navigation>
Где MainFullscreen имеет макет, подобный предоставленному вами ConstraintLayout.Просто убедитесь, что вы добавили app:defaultNavHost="true"
ко всем вашим дочерним фрагментам NavHostFragments.
Затем, когда я хочу перейти от вашего blankFragment1 к полноэкранному2, я вызываю это:
Navigation.findNavController(activity!!, R.id.main_host_fragment).navigate(R.id.action_main_fullscreen_to_fullscreen2)
Конечно, не так уж многоуказывают на наличие навигационных графиков, если они на самом деле не связаны, за исключением того, что они находятся в одном и том же упражнении, но мне просто нравится красивая картинка приложения, которое графики выдают в редакторе навигации:)