首先,在build.gradle.kts文件添加如下依赖
val nav_version = "2.8.2"
// Jetpack Compose integration
implementation("androidx.navigation:navigation-compose:$nav_version")
// Views/Fragments integration
implementation("androidx.navigation:navigation-fragment:$nav_version")
implementation("androidx.navigation:navigation-ui:$nav_version")
// Feature module support for Fragments
implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")
// Testing Navigation
androidTestImplementation("androidx.navigation:navigation-testing:$nav_version")
// https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-serialization-json
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3")
并且,需要在该文件中添加一个插件,用于实现序列化
plugins {
kotlin("plugin.serialization") version "2.0.21"
}
修改MainActivity.kt
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
MobilePlayerTheme {
val navController = rememberNavController()
NavHost(navController = navController, startDestination = Splash) {
composable<Splash> {
SplashUI {
navController.navigate(route = Main) {
popUpTo<Splash> {
inclusive = true
}
}
}
}
composable<Main> {
MainUI() }
}
}
}
}
}
@Serializable
object Main
@Serializable
object Splash
其中,NavHost函数是用来设置导航图的,Main和Splash是两个序列化对象,相当于跳转路径,SplashUI 和MainUI是两个可组合函数,就是两个页面,通过调用navController.navigate()函数实现页面跳转,将页面跳转的代码作为Lambda表达式传入SplashUI,popUpTo<> {inclusive = true}函数用于跳转后在历史堆栈中删除前一个页面,如果不调用,默认不会删除。
这是基本用法,这里做一下记录。