当前位置: 首页 > 知识库问答 >
问题:

从NavHost迁移到动画NavHost

廉鸿运
2023-03-14

嗨,我正在尝试将我的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个答案

宣胜
2023-03-14

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

董高洁
2023-03-14

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

吴驰
2023-03-14

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

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

 类似资料:
  • 我和我的团队有一个基于亚马逊Kinesis服务的流媒体系统,该系统使用Java独立消费者和KCL向其他团队提供跟踪信息。我们已经决定将这个系统迁移到谷歌云平台。 我们了解到,Google Platform中Amazon Kinesis的自然替代品是Google Cloud Dataflow服务。对吗? 其他问题是关于数据分区,因为我们在Kinesis中使用user-id作为分区键。是否可以在Goo

  • 问题内容: 我们的Oracle数据库遇到了严重的性能问题,我们想尝试将其迁移到基于MySQL的数据库(直接使用MySQL,或者最好是Infobright)。 问题是,在我们实际上不知道新数据库的所有功能是否符合我们的需求之前,我们需要让旧系统和新系统至少重叠数周(如果不是几个月)。 因此,这是我们的情况: Oracle数据库由多个表组成,每百万行。白天,实际上有成千上万的语句,我们无法停止迁移。

  • 问题内容: 在我的应用程序中,我从UIWebView迁移到WKWebView,如何为WKWebView重写这些功能? 和 问题答案: UIWebView => WKWebView等效 关于您可以写: 对于:

  • 考虑: 为什么,我怎么才能让它起作用? 我的CPU是i5-10210u(支持AVX-256)。在X64版本/调试中运行。

  • TypeScript不是凭空存在的。 它从JavaScript生态系统和大量现存的JavaScript而来。 将JavaScript代码转换成TypeScript虽乏味却不是难事。 接下来这篇教程将教你怎么做。 在开始转换TypeScript之前,我们假设你已经理解了足够多本手册里的内容。 如果你打算要转换一个React工程,推荐你先阅读React转换指南。 如果你在写纯JavaScript,你大

  • 我正在将我的应用程序从Log4J1.2迁移到Log4J2-2.8.1版本。下面是log4j.properties文件中现有的1.x配置。