2
votes

kotlin.TypeCastException: null ne peut pas être converti en type non nul androidx.navigation.fragment.NavHostFragment à NavigationExtensionsKt

Exception

J'ai copié le fichier d'extension NavigationExtensions.kt à partir de NavigationAdvancedSample et j'obtiens cette exception:


2 commentaires

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.


3 Réponses :


-1
votes

pouvez-vous essayer avec ça?

val selectedFragment: NavHostFragment? = fragmentManager.findFragmentByTag(newlySelectedItemTag) as NavHostFragment


4 commentaires

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



3
votes

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
        )
    }


0 commentaires

0
votes

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.


0 commentaires