wake-up-neo.com

implementieren der bedingten Navigation in Navigationsarchitekturkomponenten

Wie wird in der neuen Navigationsarchitekturkomponente die bedingte Navigation implementiert?

Derzeit habe ich eine einzelne Aktivität mit LoginFragment und HomeFragment. Basierend auf einem bestimmten login_flag habe ich jedes Fragment aus der MainActivity aufgerufen. Da LoginFragment nur einmal aufgerufen wird, habe ich startDestination auf HomeFragment gesetzt und die Navigation lädt dieses HomeFragment. Gibt es eine Möglichkeit, das login_flag zu überprüfen, bevor die Navigation das HomeFragment lädt?.

5
Shashi Kiran

Sie können einen Navigations-Listener in Ihre Aktivität einfügen und von dort zu LoginFragment navigieren, basierend auf Ihren Bedingungen, wie folgt:

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

        }
    }
2
Alex

So gehe ich mit bedingter Navigation um:

  1. Setze HomeFragment als Startziel
  2. Erstellen Sie eine globale Aktion für LoginFragment

    <action
        Android:id="@+id/action_global_loginFragment"
        app:destination="@id/loginFragment"
        app:launchSingleTop="false"
        app:popUpTo="@+id/nav_graph"
        app:popUpToInclusive="true" />
    
  3. Führen Sie eine bedingte Navigation in onViewCreated durch:

    // 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
maxbeaudoin