kotlin,jetpack compose 最简导航(navigation)案例学习

复制代码
// 添加导航组件依赖,用于支持Compose中的导航功能
implementation ("androidx.navigation:navigation-compose:2.8.9")
复制代码
// 定义包名
package com.example.mynavigation

// 导入所需的Android和Compose库
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.navigation.NavController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.example.mynavigation.ui.theme.MyNavigationTheme

// 定义MainActivity类,继承自ComponentActivity
class MainActivity : ComponentActivity() {
    // 重写onCreate方法,用于初始化Activity
    override fun onCreate(savedInstanceState: Bundle?) {
        // 调用父类的onCreate方法
        super.onCreate(savedInstanceState)
        // 启用边缘到边缘的显示模式
        enableEdgeToEdge()
        // 设置Activity的内容视图
        setContent {
            // 使用自定义的主题
            MyNavigationTheme {
                // 创建一个导航控制器
                val navController = rememberNavController()
                // 定义导航图
                NavHost(navController = navController, startDestination = "home") {
                    // 定义home目的地的界面
                    composable("home") { HomeScreen(navController) }
                    // 定义detail456目的地的界面,并传递id参数
                    composable("detail/{id}") { backStackEntry ->
                        // 从导航参数中获取id
                        val id = backStackEntry.arguments?.getString("id")
                        // 显示DetailScreen界面
                        DetailScreen(navController, id)
                    }
                }
            }
        }
    }
}

// 定义HomeScreen可组合函数,用于显示主界面
@Composable
fun HomeScreen(navController: NavController) {
    // 使用Column布局,填充整个屏幕,内容垂直和水平居中
    Column(
        modifier = Modifier.fillMaxSize(), // 填充整个屏幕
        verticalArrangement = Arrangement.Center, // 垂直居中
        horizontalAlignment = Alignment.CenterHorizontally // 水平居中
    ) {
        // 定义一个按钮,点击后导航到detail456界面,并传递id参数
        Button(onClick = { navController.navigate("detail/123") }) {
            // 按钮上显示文本
            Text("Navigate with ID 123")
        }
    }
}

// 定义DetailScreen可组合函数,用于显示详情界面
@Composable
fun DetailScreen(navController: NavController, id: String?) {
    // 使用Column布局,填充整个屏幕,内容垂直和水平居中
    Column(
        modifier = Modifier.fillMaxSize(), // 填充整个屏幕
        verticalArrangement = Arrangement.Center, // 垂直居中
        horizontalAlignment = Alignment.CenterHorizontally // 水平居中
    ) {
        // 显示详情界面的标题
        Text("Detail Screen")
        // 显示传递过来的id,如果id为空则显示"Unknown"
        Text("ID:  ${id ?: "Unknown"}")
        // 定义一个按钮,点击后返回上一个界面
        Button(onClick = { navController.navigateUp() }) {
            // 按钮上显示文本
            Text("Back")
        }
    }
}
相关推荐
JMchen12315 小时前
Android CameraX深度解析:从Camera1到CameraX的相机架构演进
android·java·数码相机·架构·kotlin·移动开发·android-studio
倔强的石头10615 小时前
【Linux指南】进程控制系列(五)实战 —— 微型 Shell 命令行解释器实现
linux·运维·kotlin
Hz4531 天前
Android Jetpack核心组件协同实战:Navigation 3.X+Lifecycle+Flow+Hilt的架构革新
android·kotlin
JMchen1231 天前
Android音频编码原理与实践:从AAC到Opus,深入解析音频编码技术与移动端实现
android·经验分享·学习·kotlin·android studio·音视频·aac
JMchen1231 天前
Android音频处理全解析:从3A算法到空间音频,打造专业级音频体验
android·经验分享·算法·kotlin·android studio·音视频
瓦特what?2 天前
C++编程防坑指南(小说版)
android·c++·kotlin
一招定胜负2 天前
卷积神经网络提取人脸五个特征点
人工智能·cnn·kotlin
HeDongDong-2 天前
详解 Kotlin 的函数
开发语言·python·kotlin
zhangphil3 天前
Kotlin高阶函数及函数作为参数传递(2)
kotlin
Yang-Never3 天前
Open GL ES -> 应用前后台、Recent切换,SurfaceView纹理贴图闪烁问题分析解决
android·开发语言·kotlin·android studio·贴图