我在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")
}
我打电话给
@Composable fun AddAccountFAB() { val context = 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转到一个页面。
发布于 2021-05-17 06:27:06
尝试删除
navController.graph = navController.graph
发布于 2021-05-22 19:40:44
看起来唯一实际的选择是在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")}
)
https://stackoverflow.com/questions/67563326
复制