依赖项网页:https://developer.android.com/jetpack/androidx/releases/navigation?hl=zh-cn#declaring_dependencies
引入依赖
dependencies {
val nav_version = "2.8.8" //稳定版本
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")
}
以上使用Kotlin DSL,修改build.gradle.kts后点Sync Now
Use
val localNavController = compositionLocalOf <NavController> { error("No NavController found!") }
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
NavtestTheme {
val navController = rememberNavController()
CompositionLocalProvider(localNavController provides navController) {
NavHost(navController = navController, startDestination = "home", /*不使用页面切换时的动画效果*/
enterTransition = {
EnterTransition.None
}, exitTransition = {
ExitTransition.None
}, popEnterTransition = {
EnterTransition.None
}) {
composable("home") {
HomeScreen()
}
composable("profile/{p1}/{p2}") { backStackEntry ->
// 页面路由参数,在跳转到此页面时的方式:
// nav.navigate("profile/1/2")
val p1 = backStackEntry.arguments?.getString("p1")
val p2 = backStackEntry.arguments?.getString("p2")
ProfileScreen()
}
dialog("profile") {
//以模态弹窗的形式显示页面
ProfileScreen()
}
composable("login") {
Login()
}
}
}
}
}
}
}
@Composable
fun ProfileScreen() {
//在任意页面中用localNavController获取NavController实例
val nav = localNavController.current
nav.navigate("login")
}