提问者:小点点

从NavHost迁移到动画NavHost


嗨,我正在尝试将我的Android Studio项目从NavHost迁移到AnimatedNavHost,因此我进行了更改:

  • 用RememberNamedNavController()替换rememberNavController()。
  • 将NavHost替换为在本博客上找到的AnimatedNavHost:https://medium.com/androiddevelopers/animations-in-navigation-compose-36d48870776b

我没有添加任何动画,但当我试图运行我的应用程序时,编译器告诉我这个错误:

java.lang.NoSuchMethodError:没有静态方法记忆NavController(Landroidx/compose/runtime/Composer; I)Landroidx/导航/NavHostController;在类Landroidx/导航/compose/NavHostControlllerKt;或其超类('androidx.navigation.compose.NavHostControllerKt'的声明出现在 /data/app/~~3ss2A6J7mK0SYONGyPJOUw==/com.example.soschool-o-E9YEHWVSYOUf5K7L3c5Q==/base.apk!classes11.dex)

现在,我将附加两个感兴趣的类:
导航图:

@ExperimentalAnimationApi
@ExperimentalPagerApi
@Composable
fun SetupNavGraph(
    navController: NavHostController,
    startDestination: String
) {
    AnimatedNavHost(
        navController = navController,
        startDestination = startDestination
    ) {
        composable(route = Screen.Welcome.route) {
            WelcomeScreen(navController = navController)
        }
        composable(route = Screen.Home.route) {
            HomeScreen()
        }
        composable(route = Screen.Login.route){
            LoginScreen()
        }
    }
}

主要活动:

@ExperimentalAnimationApi
@ExperimentalPagerApi
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
    @Inject
    lateinit var splashViewModel: SplashViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        installSplashScreen().setKeepOnScreenCondition {
            !splashViewModel.isLoading.value
        }

        setContent {
            SOSchoolTheme {
                val screen by splashViewModel.startDestination
                val navController = rememberAnimatedNavController()
                SetupNavGraph(navController = navController, startDestination = screen)
            }
        }
    }
}

当我在没有动画内容的情况下运行应用程序时,一切都很好,但是当我更改动画导航控制器()以记住MainActive上的动画导航控制器()NavHost动画NavHost时,应用程序崩溃并说出我写的错误。


共3个答案

匿名用户

将版本更改为0.21.1测试版对我很有效。

实现“com.google .伴奏者:伴奏者-导航-动画:0.21.1-beta”

匿名用户

替换从<code>导入androidx.navigation.compose的导入。可组合到导入com.google.compost.navigation.animation.composable。这是伴奏github上列出的问题之一。

匿名用户

compileSdkVersion设置为33或最新版本(以较高者为准),并进行所有必要的更改,如正确导入,您正在阅读应用程序中的集成动画。