任何一个App不可能只展示一个页面,因此,页面跳转是一个必不可少的功能。在Compse中,使用Navigation组件在可组合项之间导航。如果需要使用Navigation组件,必须在应用模块的build.gradle文件中添加一下依赖:
dependencies {
implementation "androidx.navigation:navigation-compose:2.4.0-beta02"
}
一、认识NavController
NavController是Navigation组件的有状态的中心API,组成应用屏幕的可组合项的返回堆栈和每个屏幕的状态都可用此API来跟踪记录。在组合项中,它是通过rememberController()方法来创建的。如下:
val navController = rememberNavController()
为了使所有的组合项都可以访问NavController,必须在组合项层次结构中的适当位置创建它。
二、创建并关联NavHost
每个NavController都必须与一个NavHost可组合项相关联。NavHost是NavController和导航图之间的桥梁,导航图是用来指定导航的可组合项目的地。在可组合项之间进行导航期间,NavHost的内容会自动进行重组。而导航图中的每个可组合项目的地都与一个路线相关联,该路线是字符串,指定了可组合项的路径。需要注意的是:每个目一条路径应对应一个可组合项,如果一条路径用于多个可组合项,则会导航到最后一个设定的可组合项。
创建并关联NavHost需要用到rememberNavController创建的NavController和导航图的起始目的地的路线,如下:
NavHost(navController = navController, startDestination = "home") {
composable("home") { Home(/*...*/) }
composable("goodsDetail") { GoodsDetail(/*...*/) }
composable("createOrder") { CreateOrder(/*...*/) }
/*...*/
}
三、导航(跳转)到可组合项
导航到某个可组合项,必须使用NavController.navigate("目的地路径参数")方法。
1.简单的跳转:直接使用NavController.navigate("目的地路径参数")
我们可以创建首页和商品详情组合,然后给它们指定路径
@Composable
fun compose_15() {
// 创建NavController
val navController = rememberNavController()
// 用NavHost将NavController和导