Как изменить хост навигации в архитектуре Android? - PullRequest
0 голосов
/ 03 февраля 2019

поэтому я пытаюсь узнать об использовании навигационного графика в Android, я не уверен, что я делаю, поэтому, возможно, у вас есть лучший способ.

допустим, есть 2 раздела в моем приложении:

  1. Первый раздел называется Главным разделом, который имеет нижнюю панель навигации и панель инструментов

  2. Второй раздел называется Разделом аутентификации (для страницы входа зарегистрируйтесь), он не имеет нижнего вида навигации или панели инструментов

, поэтому, поскольку эти 2 раздела имеют различную «рамку» (одна имеет нижнюю панель навигации и панель инструментов, а другая - нет), поэтому я делаю2 мероприятия.MainActivity и AuthenticationActivity, в котором будет размещен фрагмент

, - это XML-файл MainActivity:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            android:theme="?attr/actionBarTheme"
            android:minHeight="?attr/actionBarSize"
            app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"/>


    <fragment
            android:id="@+id/nav_host_fragment"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintBottom_toTopOf="@+id/bottom_nav"
            app:layout_constraintTop_toBottomOf="@+id/toolbar"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            android:name="androidx.navigation.fragment.NavHostFragment"
            app:navGraph="@navigation/navigation_graph"
            app:defaultNavHost="true"
    />


    <android.support.design.widget.BottomNavigationView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:background="@color/colorPrimary"
            app:itemIconTint="@color/color_bottom_view_navigation"
            app:itemTextColor="@color/color_bottom_view_navigation"
            app:menu="@menu/menu_bottom_view"
            app:labelVisibilityMode="labeled"
            android:id="@+id/bottom_nav"/>

</android.support.constraint.ConstraintLayout>

, а вот XML-файл AuthenticationActivity:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".Activity.LoginActivity"
        android:background="@android:color/white">

    <fragment
            android:id="@+id/nav_login_host_fragment"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:name="androidx.navigation.fragment.NavHostFragment"
            app:navGraph="@navigation/nav_main"
            app:defaultNavHost="true"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>


</androidx.constraintlayout.widget.ConstraintLayout>

, поэтому вHomeFragment класс, я хочу сделать логику.если пользователь уже вошел в систему, оставайтесь в MainActivity (в домашнем фрагменте), в противном случае я хочу, чтобы мое приложение переместилось в AuthenticationActivity, чтобы отобразить LoginFragment

, но как это сделать?

Я понятия не имею, как установить это в навигационном графе xml (как установить место назначения и действие), и я также не знаю, как настроить код в файле kotlin для перехода на loginFragment из HomeFragment

Ранее я думал, что на главном навигационном графике я делаю вложенный график следующим образом:

enter image description here

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

в * kotlin файле HomeFragment Я запутался, как сделать действие для этой аутентификацииActivity (для LoginFragment), мне нужно сделать логику следующим образом:

if (userHasLoggedIn) {
     Navigation.findNavController(it).navigate(loginDestination)
}

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

, если честно, я не уверен, разделив его с помощью 2-х таких действий, может быть, у вас есть лучший подход?

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