IllegalArgumentException:此 NavController 未知导航目的地 xxx

新手上路,请多包涵

当我尝试从 一个 Fragment 导航到另一个 Fragment 时,我遇到了新的 Android Navigation Architecture 组件的问题,我收到了这个奇怪的错误:

 java.lang.IllegalArgumentException: navigation destination XXX
is unknown to this NavController

除了这个特定的导航之外,其他所有导航都可以正常工作。

我使用片段的 findNavController() 函数来访问 NavController

任何帮助将不胜感激。

原文由 Jerry Okafor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 510
1 个回答

我在我的项目中遇到了同样的问题,首先我尝试去抖动触发导航操作的视图上的点击,但经过一些实验后,我发现在非常慢的设备上去抖动应该是一个非常高的值,导致应用程序让使用快速设备的用户感觉慢。

所以我想出了以下对 NavController 的扩展,我认为它符合原始 API 并且易于使用:

 fun NavController.safeNavigate(directions: NavDirections) {
    try {
        currentDestination?.getAction(directions.actionId) ?: return
        navigate(directions.actionId, directions.arguments, null)
    } catch (e : Exception) {
        logError("Navigation error", e)
    }
}

fun NavController.safeNavigate(directions: NavDirections, navOptions: NavOptions?) {
    try {
        currentDestination?.getAction(directions.actionId) ?: return
        navigate(directions.actionId, directions.arguments, navOptions)
    } catch (e : Exception) {
        logError("Navigation error", e)
    }
}

fun NavController.safeNavigate(directions: NavDirections, navigatorExtras: Navigator.Extras) {
    try {
        currentDestination?.getAction(directions.actionId) ?: return
        navigate(directions.actionId, directions.arguments, null, navigatorExtras)
    } catch (e : Exception) {
        logError("Navigation error", e)
    }
}

请注意,我使用的是 SafeArgs 和 NavDirections。这些函数检查当前目的地的操作是否有效,并且仅在操作不为空时导航。如果导航库每次都返回正确的操作,则不需要 try catch 部分,但我想消除所有可能的崩溃。

原文由 Kozma Zoltán Balázs 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题