androidx.navigation.NavGraph不能强制转换为androidx.navigation.compo



在将导航组合依赖项从2.4.0-alpha03更新到22.4.0-alpha05之后,我在尝试在可组合屏幕之间导航时遇到了这个奇怪的错误(例如,从taskComposable导航到listComposable屏幕)。这是我代码的一部分。

主要活动:

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
private lateinit var navController: NavHostController
@ExperimentalAnimationApi
@ExperimentalMaterialApi
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyComposeDemoTheme {
navController = rememberNavController()
SetupNavigation(
navController = navController
)
}
}
}
}

设置导航:

@ExperimentalAnimationApi
@ExperimentalMaterialApi
@Composable
fun SetupNavigation(
navController: NavHostController
) {
val screen = remember(navController) { Screens(navController) }
NavHost(
navController = navController,
startDestination = "list/{action}"
) {
listComposable(
navigateToTaskScreen = screen.task
)
taskComposable(
navigateToListScreen = screen.list
)
}
}

屏幕:

class Screens(navController: NavHostController) {
val list: (Action) -> Unit = { action ->
navController.navigate("list/${action.name}"){
popUpTo(LIST_SCREEN) { inclusive = true }
}
}
val task: (Int) -> Unit = { taskId ->
navController.navigate("task/$taskId")
}
}

任务可组合

fun NavGraphBuilder.taskComposable(
navigateToListScreen: (Action) -> Unit
) {
composable(
route = TASK_SCREEN,
arguments = listOf(navArgument(TASK_ID_ARGUMENT_KEY) {
type = NavType.IntType
})
) {
TaskScreen(
navigateToListScreen = navigateToListScreen
)
}
}

错误:

进程:com.example.mycomposedemo,PID:2413java.lang.ClassCastException:androidx.navigation.NavGraph不能强制转换为androidx.navigation.compose.ComposeNavigator$Destination在androidx.navigation.compose.NavHostKt$NavHost$6$1.ioke(NavHost.kt:146)在androidx.navigation.compose.NavHostKt$NavHost$6$1.ioke(NavHost.kt:145)在androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)在androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)位于androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)位于androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84)位于androidx.navigation.compose.NavBackStackEntryProviderKt.SaveableStateProvider(NavBackStackEntryProvider.kt:59)位于androidx.navigation.compose.NavBackStackEntryProviderKt.access$SaveableStateProvider(NavBackStackEntryProvider.kt:1)位于androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.ioke(NavBackStackEntryProvider.kt:51)位于androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.ioke(NavBackStackEntryProvider.kt:50)在androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)在androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)位于androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)位于androidx.navigation.compose.NavBackStackEntryProviderKt.LocalOwnersProvider(NavBackStackEntryProvider.kt:46)在androidx.navigation.compose.NavHostKt$NavHost$6.ioke(NavHost.kt:145)在androidx.navigation.compose.NavHostKt$NavHost$6.ioke(NavHost.kt:144)在androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116)在androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)在androidx.compose.animation.CrosfadeKt$Crosfade$1.invoke(Crossfade.kt:74)在androidx.compose.animation.CrosfadeKt$Crosfade$1.invoke(Crossfade.kt:69)在androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)在androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)在androidx.compose.animation.CrosfadeKt.Crossfade(Crossfade.kt:86)在androidx.navigation.compose.NavHostKt.NavHost(NavHost.kt:144)位于androidx.navigation.compose.NavHostKt$NavHost$7.invoke(未知资料来源:13)位于androidx.navigation.compose.NavHostKt$NavHost$7.invoke(未知来源:10)在androidx.compose.runtime.RomposeScopeImpl.compose(RecomposeScopeImpl.kt:140)在androidx.compose.runtime.ComposeImpl.recomposeToGroupEnd(Composer.kt:2156)位于androidx.compose.runtime.ComposerImpl.skipCurrentGroup(Composer.kt:22399)在androidx.compose.runtime.SComposerImpl$doCompose$2$5.invoke(Composer.kt:2580)在androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2573)在androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(SnapshotState.kt:540)在androidx.compose.runtime.SComposerImpl.doCompose(Composer.kt:2566)位于androidx.compose.runtime.ComposerImpl.recompose$runtime_release(Composer.kt:2542)在androidx.compose.runtime.CompositionImpl.recomposite(Composition.kt:613)在androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:764)在androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:103)在androidx.compose.runtime.Composer$runRecomposeAndApplyChanges$2.ioke(Recomposer.kt:447)在androidx.compose.runtime.Composer$runRecomposeAndApplyChanges$2.ioke(Recomposer.kt:416)在androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFFrameClock.android.kt:34)在androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)2021-07-29 10:00:14.416 2413-2413/com.example.mycomposeddemoE/AndroidRuntime:在androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41)在androidx.compose.ui.platform.AndroidUiPadispatchCallback$1.doFrame(AndroidUiPaDispatcher.android.kt:69)在android.view.Cchoreographer$CallbackRecord.run(Choreographer.java:964)在android.view.Cchoreographer.doCallbacks(Choreographer.java:790)在android.view.Cchoreographer.doFrame(Choreographer.java:721)位于android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:951)在android.os.Handler.handleCallback(Handler.java:883)在android.os.Handler.dispatchMessage(Handler.java:100)在android.os.Looper.loop(Looper.java:214)在android.app.ActivityThread.main(ActivityThreads.java:7356)位于java.lang.reflect.Method.ioke(本机方法)网址:com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:930)

这是一个内部错误,将在Navigation 2.4.0-alpha06版本中修复@headsvk分享了问题链接:https://issuetracker.google.com/issues/194301889

相关内容

最新更新