【问题标题】:Getting a deep link exception when navigating from one Android screen to another从一个 Android 屏幕导航到另一个屏幕时出现深层链接异常
【发布时间】:2021-05-17 02:30:06
【问题描述】:

我在 MainActivity 中有这个:

@Composable
fun createNavHost(paddingValues: PaddingValues, navController: NavHostController) {
    NavHost(navController, startDestination = Screen.HomeScreen.title) {
        composable(Screen.HomeScreen.title) {
            HomeScreen(
                accountSelected = {
                    navController.navigate(Screen.PasswordDetailScreen.title + "/${it.id}")
                })
        }
        composable(Screen.EditPasswordScreen.title) {
            EditPasswordScreen()
        }
    }
}

我的布局是这样定义的:

@Composable
fun MainLayout() {
    val navController = rememberNavController()

    PasswordHelperTheme {
        Scaffold(
        ) { paddingValues ->
            createNavHost(paddingValues, navController)
        }
    }
}

屏幕是这样定义的:

sealed class Screen(val title: String) {
    object HomeScreen : Screen("Home")
    object SettingsScreen : Screen("Settings")
    object EditPasswordScreen : Screen("Edit")
    object PasswordDetailScreen: Screen("ArticleDetail")
}

我打电话

@可组合 有趣的 AddAccountFAB() { val 上下文 = LocalContext val navController = rememberNavController()

ExtendedFloatingActionButton(
    shape = CircleShape,
    icon = { Icon(Icons.Filled.Add, "") },
    onClick = {
        navController.graph = navController.graph
        navController.navigate(MainActivity.Screen.EditPasswordScreen.title) {
            popUpTo = navController.graph.startDestination
            launchSingleTop = true
        }
    },
    elevation = FloatingActionButtonDefaults.elevation(8.dp),
    text = { Text("Add Account")}
)

得到

java.lang.IllegalStateException: You must call setGraph() before calling getGraph()
        at androidx.navigation.NavController.getGraph(NavController.java:812)
        at com.blackfox.passwordhelper.android.HomeScreenKt$AddAccountFAB$1$1.invoke(HomeScreen.kt:79)

我以为createNavHost 正在设置图表。这至少让我摆脱了深层链接异常。我只是想用 FAB 去一个页面。

【问题讨论】:

    标签: kotlin jetpack-compose-navigation


    【解决方案1】:

    尝试删除

    navController.graph = navController.graph
    

    【讨论】:

    • 当我删除它时,我得到了,唯一的变化是删除了一行。 java.lang.IllegalStateException:您必须在 com.blackfox.passwordhelper.android.HomeScreenKt$AddAccountFAB$1$1.invoke(HomeScreen) 的 androidx.navigation.NavController.getGraph(NavController.java:812) 调用 getGraph() 之前调用 setGraph() .kt:80)
    【解决方案2】:

    看来唯一真正的选择是在navHost 中设置route

    NavHost(navController, startDestination = Screen.HomeScreen.title) {
            composable(Screen.HomeScreen.title) {
                HomeScreen(
                    accountSelected = {
                        navController.navigate(Screen.PasswordDetailScreen.title + "/${it.id}")
                    },
                    fabSelected = {
                        navController.navigate(Screen.EditPasswordScreen.title + "/${it.id}")
                    })
            }
            composable(Screen.EditPasswordScreen.title + "/-1") {
                EditPasswordScreen()
            }
        }
    

    这行得通:

    ExtendedFloatingActionButton(
        shape = CircleShape,
        icon = { Icon(Icons.Filled.Add, "") },
        onClick = {
            fabSelected(Passwords(-1, "", "", "", "", ""))
        },
        elevation = FloatingActionButtonDefaults.elevation(8.dp),
        text = { Text("Add Account")}
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 2014-12-07
      • 1970-01-01
      • 2022-01-22
      • 2020-07-27
      • 1970-01-01
      相关资源
      最近更新 更多