发布
社区首页 >问答首页 >从一个Android屏幕导航到另一个屏幕时出现深度链接异常

从一个Android屏幕导航到另一个屏幕时出现深度链接异常
EN

Stack Overflow用户
提问于 2021-05-17 10:30:07
回答 2查看 103关注 0票数 0

我在MainActivity中有这样的代码:

代码语言:javascript
代码运行次数:0
复制
@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()
        }
    }
}

我的布局定义如下:

代码语言:javascript
代码运行次数:0
复制
@Composable
fun MainLayout() {
    val navController = rememberNavController()

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

屏幕是这样定义的:

代码语言:javascript
代码运行次数:0
复制
sealed class Screen(val title: String) {
    object HomeScreen : Screen("Home")
    object SettingsScreen : Screen("Settings")
    object EditPasswordScreen : Screen("Edit")
    object PasswordDetailScreen: Screen("ArticleDetail")
}

我打电话给

@Composable fun AddAccountFAB() { val context = LocalContext val navController = rememberNavController()

代码语言:javascript
代码运行次数:0
复制
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")}
)

并获取

代码语言:javascript
代码运行次数:0
复制
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转到一个页面。

EN

回答 2

Stack Overflow用户

发布于 2021-05-17 14:27:06

尝试删除

代码语言:javascript
代码运行次数:0
复制
navController.graph = navController.graph
票数 0
EN

Stack Overflow用户

发布于 2021-05-23 03:40:44

看起来唯一实际的选择是在navHost中设置一个route

代码语言:javascript
代码运行次数:0
复制
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()
        }
    }

这是有效的:

代码语言:javascript
代码运行次数:0
复制
ExtendedFloatingActionButton(
    shape = CircleShape,
    icon = { Icon(Icons.Filled.Add, "") },
    onClick = {
        fabSelected(Passwords(-1, "", "", "", "", ""))
    },
    elevation = FloatingActionButtonDefaults.elevation(8.dp),
    text = { Text("Add Account")}
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67563326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档