J'ai copié le fichier d'extension NavigationExtensions.kt à partir de NavigationAdvancedSample et j'obtiens cette exception:
3 Réponses :
pouvez-vous essayer avec ça?
val selectedFragment: NavHostFragment? = fragmentManager.findFragmentByTag(newlySelectedItemTag) as NavHostFragment
Ne fonctionnera pas non plus le transtyper en un type Nullable ou utiliser l'opérateur de conversion sécurisé as?
alors que ferez-vous si selectedFragment est nul?
enveloppez-le avec if else
il lèvera la même exception si vous essayez de faire comme ça, il ne pourra pas NavHostFragment
type NavHostFragment
non nul
MISE À JOUR: assurez-vous que vos identifiants d'élément de menu sont les mêmes que ceux de vos fichiers de ressources de navigation
aussi: si vous rencontrez un problème avec ItemReselectedListener Ajoutez des vérifications de sécurité nulles, votre écouteur devrait ressembler à ceci:
setOnNavigationItemReselectedListener { item -> val newlySelectedItemTag = graphIdToTagMap[item.itemId] val selectedFragment = fragmentManager.findFragmentByTag(newlySelectedItemTag) as NavHostFragment? val navController = selectedFragment?.navController // Pop the back stack to the start destination of the current navController graph navController?.popBackStack( navController.graph.startDestination, false ) }
J'ai également fait face à ce problème, la solution est en fait très simple.
Assurez-vous que l'ID de l'élément de menu correspond à l'ID de NAV_GRAPH et non aux destinations.
J'utilisais les mêmes identifiants pour les éléments de menu et les destinations, mais dans ce cas, l'élément de menu devrait avoir le même identifiant que NAV_GRAPH.
Salut Amir, bienvenue à SO. Veuillez publier le texte réel de votre code et de votre exception, en utilisant le markdown StackOverflow correct (au lieu d'images). Regardez également comment demander et comment créer un exemple minimal et reproductible pour de meilleurs résultats lors de l'utilisation du site. Bonne chance!
Vous pouvez faire du casting en toute sécurité en utilisant
as?
opérateur.