2
votes

Composant de navigation avec navigation en bas

Je travaille avec le composant de navigation et la navigation en bas

bottom_navigation.setOnNavigationItemSelectedListener {  }

et je suis confronté au problème suivant:

Lorsqu'un élément est sélectionné dans la navigation du bas, un fragment est chargé. Le problème survient lorsque j'appuie à nouveau sur le même élément, puis un nouveau fragment sera chargé, ce qui n'a aucun sens.

Exemple: 1- L'utilisateur sélectionne l'élément de menu A, puis FragmentA est chargé. 2- L'utilisateur sélectionne à nouveau l'élément de menu A, puis un nouveau FragmentA sera chargé,

J'essayais d'utiliser

val navController = indNavController(R.id.nav_host_fragment)
bottom_navigation.inflateMenu(R.menu.bottom_navigation_menu)
bottom_navigation.setupWithNavController(navController)

Mais alors la navigation du bas sera ne fonctionne pas avec le navController.

La question est donc: il y a un moyen de gérer cette situation afin de charger à nouveau un nouveau fragment lorsque l'utilisateur est déjà dans cet écran?

p >


0 commentaires

3 Réponses :


0
votes

Essayez ceci pour ignorer le clic de l'utilisateur sur le même élément sélectionné:

bottom_navigation.apply {
        setOnNavigationItemSelectedListener {
            if (it.itemId == bottom_navigation.selectedItemId) {
                true
            } else when (it.itemId) { ... }


2 commentaires

Salut! Je n'utilise pas de liste. Quand je dis élément, je veux dire l'élément de la navigation du bas.


le problème avec cette approche est que cette ligne bottom_navigation.setupWithNavController (navController) ne fonctionnera pas alors. Il semble donc que la seule solution soit de supprimer la connexion entre le composant de navigation et la navigation du bas



6
votes

Enfin, j'ai pu résoudre ce problème.

Comme je l'ai déjà dit, ce code:

bottom_navigation.setOnNavigationItemReselectedListener { }

utilise

bottom_navigation.setOnNavigationItemSelectedListener {  }


2 commentaires

Merci, @Ocampo, cela m'a fait gagner beaucoup de temps.


Rapide et facile. Thaanks!



0
votes

Je préfère utiliser l'écouteur de navController:

navController.addOnDestinationChangedListener { 
    controller, destination, arguments -> 
        //destination.id for id fragment        
}

Donc l'écouteur est déclenché lorsque la destination change - pas en cliquant sur bottom_navigation code >.
Parce que setOnNavigationItemSelectedListener est déjà utilisé lorsque setupWithNavController est déclaré.


0 commentaires