当前位置: 首页 > article >正文

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")
        }
    }
}

http://www.kler.cn/a/613970.html

相关文章:

  • 【Zabbix技术系列文章】第①篇——基础入门
  • 宝塔面板面试内容整理-常见宝塔面板版本
  • 【vue】vue + vant实现上传图片添加水印
  • 使用matlab进行分位数回归
  • 基于Vue的低代码可视化表单设计器 FcDesigner 3.2.11更新说明
  • 机器学习和深度学习的关系
  • 自动化逆向框架使用(Objection+Radare2)
  • Manus:通用智能体的架构革命与产业破局
  • 记一次系统单点登录、模拟web系统登录方式的开发过程,使用AES加密
  • Arduino、ESP32驱动GUVA-S12SD UV紫外线传感器(光照传感器篇)
  • C 标准库 – 头文件
  • git_merge
  • 12_JavaScript_实现日期
  • 21.Excel自动化:如何使用 xlwings 进行编程
  • 大模型——使用Ollama本地部署Gemma-3-27B大模型,基于LangChain分析PDF文档
  • 解决“Generic family ‘sans-serif‘ not found”问题
  • ansible介绍以及安装
  • 【Golang】补充:占位符、转义字符、错误处理
  • Rust 面向对象
  • 基于Zookeeper的微服务配置管理与灰度发布实战指南