kotlin.TypeCastException: null 不能在 NavigationExtensionsKt 转换为非空类型 androidx.navigation.fragment.NavHostFragment
kotlin.TypeCastException: null cannot be cast to non-null type androidx.navigation.fragment.NavHostFragment at NavigationExtensionsKt
我从 NavigationAdvancedSample 复制了 NavigationExtensions.kt 扩展文件,但我得到了这个异常:
你能试试这个吗?
val selectedFragment: NavHostFragment? = fragmentManager.findFragmentByTag(newlySelectedItemTag) as NavHostFragment
更新:确保您的菜单项 ID 与您的导航资源文件 ID 相同
另外:如果您对 ItemReselectedListener 有疑问
添加空安全检查,你的监听器应该是这样的:
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
)
}
我也遇到过这个问题,解决方法其实很简单
确保您的菜单项的 ID 与 NAV_GRAPH 而非目的地的 ID 相匹配。
我对菜单项和目的地使用了相同的 ID,但在这种情况下,菜单项应具有与 NAV_GRAPH 相同的 ID。
我也遇到了同样的问题
检查您是否已设置起始目的地并将其附加到片段。
在您的导航图中设置 app:startDestination="@id/your 片段"
这应该可以解决您的问题
就我而言,我忘记在 FragmentContainerView
中添加 android:name="androidx.navigation.fragment.NavHostFragment"
我设法解决了这个问题。
就我而言,我在 setContentView(binding.root)
之前调用了 val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
,所以我更改了方法的顺序,一切正常。
我从 NavigationAdvancedSample 复制了 NavigationExtensions.kt 扩展文件,但我得到了这个异常:
你能试试这个吗?
val selectedFragment: NavHostFragment? = fragmentManager.findFragmentByTag(newlySelectedItemTag) as NavHostFragment
更新:确保您的菜单项 ID 与您的导航资源文件 ID 相同
另外:如果您对 ItemReselectedListener 有疑问 添加空安全检查,你的监听器应该是这样的:
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
)
}
我也遇到过这个问题,解决方法其实很简单
确保您的菜单项的 ID 与 NAV_GRAPH 而非目的地的 ID 相匹配。
我对菜单项和目的地使用了相同的 ID,但在这种情况下,菜单项应具有与 NAV_GRAPH 相同的 ID。
我也遇到了同样的问题
检查您是否已设置起始目的地并将其附加到片段。 在您的导航图中设置 app:startDestination="@id/your 片段"
这应该可以解决您的问题
就我而言,我忘记在 FragmentContainerView
中添加 android:name="androidx.navigation.fragment.NavHostFragment"我设法解决了这个问题。
就我而言,我在 setContentView(binding.root)
之前调用了 val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
,所以我更改了方法的顺序,一切正常。