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 >
3 Réponses :
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) { ... }
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
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 { }
Merci, @Ocampo, cela m'a fait gagner beaucoup de temps.
Rapide et facile. Thaanks!
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é.