как реализовать условную навигацию в компонентах архитектуры навигации - PullRequest
0 голосов
/ 23 мая 2018

Как реализовать условную навигацию в новом компоненте архитектуры навигации?

В настоящее время у меня есть одно действие с LoginFragment и HomeFragment.Основываясь на определенном login_flag, я использовал для вызова любого фрагмента из MainActivity.Поскольку LoginFragment вызывается только один раз, я установил startDestination в HomeFragment, и навигация загружает этот HomeFragment.Есть ли способ проверить флажок login_flag до того, как навигация загрузит HomeFragment.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Вот как я справляюсь с условной навигацией :

  1. Установить HomeFragment в качестве начального пункта назначения
  2. Создать глобальное действие для LoginFragment

    <action
        android:id="@+id/action_global_loginFragment"
        app:destination="@id/loginFragment"
        app:launchSingleTop="false"
        app:popUpTo="@+id/nav_graph"
        app:popUpToInclusive="true" />
    
  3. Выполнение условной навигации внутри onViewCreated:

    // HomeFragment.kt
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
    
        if(!appAuth.isAuthenticated()) {
            view.findNavController().navigate(R.id.action_global_loginFragment)
        }
    }
    
0 голосов
/ 24 мая 2018

Вы можете добавить прослушиватель навигации внутри своей деятельности и оттуда перейти к LoginFragment в зависимости от ваших условий, например:

findNavController(nav_host_fragment).addOnNavigatedListener { controller, destination ->
        when(destination.id) {
            R.id.HomeFragment-> {
             if(someCondition) {
               //Navigate to LoginFragment
             }

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