Новый компонент навигации из арки с вложенным графом навигации - PullRequest
0 голосов
/ 07 июня 2018

У меня есть один случай, и я хочу реализовать его с помощью компонента арочной навигации.Например, у меня есть 2 навигационных графика (основной и вложенный).Можно ли назвать основной граф из вложенного и как? пример

Ответы [ 4 ]

0 голосов
/ 22 августа 2019

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

Создать глобальное действие из вложенного графа навигации к желаемому месту назначенияна главном навигационном графике (выделено на рисунке ниже)

пример:

nav graph

<navigation android:id="@+id/main_nav_graph"
     ... >
     <fragment android:id="@+id/fragStart" .../>
     <fragment .../>
     <fragment .../>

     <navigation  android:id="@+id/nested_nav_graph">
           ...

     <!-- Global Action -->
     <action
         android:id="@+id/action_global_start"
         app:destination="@id/fragStart" />
     </navigation>

</navigation>

Для перехода к пункту назначения основного графика используйте

findNavController().navigate(R.id.action_global_start)
0 голосов
/ 21 июня 2018

На самом деле работает, используя

val host: NavHostFragment? = (childFragmentManager.findFragmentById(R.id.main_app_fragment_container)  as NavHostFragment?)

Я могу перейти от основного фрагмента

0 голосов
/ 24 июля 2018

Смысл в том, чтобы получить право NavController для навигации по правильному графику.Давайте возьмем этот сценарий в качестве примера:

MainActivity
|- MainNavHost
   |- NavBarFragment
   |  |- NestedNavHost
   |  |  |-NestedContentFragment1
   |  |  |-NestedContentFragment2
   |  |
   |  |- BottomNavigationView
   |
   |- LoginFragment

Основной график и вложенный график находятся в отдельных файлах XML: насколько я понял, это необходимо, поскольку навигация ориентирована на разные области макета, поэтому онитребуется два разных NavHost с.Каждый Navhost должен будет ссылаться на свой график по идентификатору, что требует, чтобы они были в разных файлах ресурсов.

Дело в том, что для навигации по конкретному графику мы должны получить ссылку на владельца правильного графика: для этого при вызове Navigation.findNavController(view) аргумент view имеет решающее значение.

Документы говорят, что

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

Так, например, если внутри NavBarFragment мы пишем

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    navController = Navigation.findNavController(view)
}

здесь view является parent из NestedNavHost (то есть вложенный NavHostFragment), не являющийся потомком, что означает, что findNavController будет искать в дереве вверх по течению и вернет MainNavHost '* NavController.

Если вместо этого мы напишем

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    val fragmentContainer = view.findViewById<View>(R.id.nestedNavHostFragment)
    navController = Navigation.findNavController(fragmentContainer)
}

, где nestedNavHostFragment - это идентификатор в теге fragment в макете, мы получаем ссылку на правильный NestedNavHost, потому что представлениеТеперь перейти к findNavController принадлежитNestedNavHost поддерево.

Аналогично, если вам нужно получить ссылку на основной NavController изнутри NestedContentFragment, вот что мы можем сделать:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    // we can get the innermost NavController using this view,
    // because we are inside its subtree:
    nestedNavController = Navigation.findNavController(view)

    // we can find the outer NavController passing the owning Activity
    // and the id of a view associated to that NavController,
    // for example the NavHostFragment id:
    mainNavController = Navigation.findNavController(activity!!, R.id.mainNavHostFragment)
}
0 голосов
/ 21 июня 2018

Та же проблема, все примеры, найденные в сети, повторяют основные настройки.У меня есть навигационный граф в основной деятельности, который начинается с фрагмента входа в систему, после того как логин переходит к основному фрагменту, у которого есть еще один навигационный граф с нижним видом навигации.Проблема в том, что основной фрагмент привязан к основному графу активности.Я думаю, что только фрагменты внутри основного фрагмента могут использовать навигационный граф основного фрагмента.

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