Компонент навигации со всеми фрагментами или некоторыми активностями?

Я делаю приложение, в основе которого лежит нижняя панель навигации. Проблема возникает, когда мне нужно перейти на страницу, на которой не должно быть и не должно отображаться нижнее представление навигации. Если я использую фрагмент, нижняя панель навигации не будет отображаться, поскольку она объявлена ​​в xml основного действия:

XML основной деятельности

<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?attr/actionBarSize">

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:background="?android:attr/windowBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu" />

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@id/nav_view"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/mobile_navigation" />
</androidx.constraintlayout.widget.ConstraintLayout>

Мой вопрос: следует ли использовать новое действие с собственным NavHostFragment и графиком? Или, может быть, использовать вложенную навигацию и продолжать использовать фрагменты? Как мне скрыть нижнюю панель навигации, если я выберу второй вариант?


person Juan Rincon    schedule 11.03.2020    source источник


Ответы (1)


Согласно Слушайте документацию по навигационным событиям:

Например, у вас могут быть общие элементы пользовательского интерфейса, которые вы собираетесь показывать в одних областях приложения, скрывая их в других. Используя свой собственный OnDestinationChangedListener, вы можете выборочно отображать или скрывать эти элементы пользовательского интерфейса в зависимости от целевого назначения.

Итак, да, вы можете выборочно отображать или скрывать элементы пользовательского интерфейса вашей деятельности, такие как ваш BottomNavigationView, когда вы перемещаетесь в определенные места назначения:

navController.addOnDestinationChangedListener { _, destination, _ ->
    if(destination.id == R.id.full_screen_destination) {
        nav_view.visibility = View.GONE
    } else {
        nav_view.visibility = View.VISIBLE
    }
}
person ianhanniballake    schedule 11.03.2020
comment
Я пропустил этот раздел при чтении документации. Спасибо за это! Кажется, они действительно все продумали. - person Juan Rincon; 11.03.2020