使用Jetpack Navigation实现页面跳转的方法

首先,在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}函数用于跳转后在历史堆栈中删除前一个页面,如果不调用,默认不会删除。
这是基本用法,这里做一下记录。

猜你喜欢

转载自blog.csdn.net/woshihedayu/article/details/142912520