晖顶蝇 发表于 2025-5-30 10:54:09

Android Compose 应用进阶:Navigation 组件、共享元素与预测性返回的深度实践

Android Compose 应用进阶:Navigation 组件、共享元素与预测性返回的深度实践
Development of Shared element, Navigation, Predictive back component using Compose on Android
简述:

[*]打开软件预测性返回选项后,使用Navigation组件组合页面间的跳转 即可实现页面的预测性返回
[*]使用Navigation组件组合的页面,设置共享元素 即可实现共享元素间的预测性返回。
支持预测性返回手势

查看官方教程即可:
https://developer.android.com/guide/navigation/custom-back/predictive-back-gesture
Navigation导航 结合 Shared element共享元素

Navigation导航学习:

查看官方教程学习:
https://developer.android.com/develop/ui/compose/navigation?hl=zh-cn
导航主干-伪代码:
// 1. 定义导航路由
sealed class PhotoScreenRouteForColumn(val route: String) {
    object Grid : PhotoScreenRouteForColumn("photo_grid") // 网格视图
    // 详情路由需要两个参数
    object Detail : PhotoScreenRouteForColumn("photo_detail/{outerIndex}/{innerIndex}") {
      fun createRoute(outerIndex: Int, innerIndex: Int) = "photo_detail/$outerIndex/$innerIndex"
    }
}
// 2.主屏幕 Composable
@Composable
fun RespondCollectScreenSimplified(
    collectId: Long,
    appNavController: NavController,
    // ... (其他状态初始化和数据获取逻辑)
) {
    // 创建内部导航控制器
    val photoNavController = rememberNavController()
    // 定义导航宿主
    NavHost(
      navController = photoNavController,
      startDestination = PhotoScreenRouteForColumn.Grid.route
    ) {
      // 路由 1: 网格视图
      composable(PhotoScreenRouteForColumn.Grid.route) {
            // 模拟点击照片后导航到详情
            val onPhotoClick = { outerIndex: Int, innerIndex: Int ->
                photoNavController.navigate(
                  PhotoScreenRouteForColumn.Detail.createRoute(outerIndex, innerIndex)
                )
            }
            // 假设这里会显示一个照片列表,点击后触发 onPhotoClick
            println("显示照片网格视图")
      }

      // 路由 2: 详情视图
      composable(
            route = PhotoScreenRouteForColumn.Detail.route,
            arguments = listOf(
                navArgument("outerIndex") { type = NavType.IntType },
                navArgument("innerIndex") { type = NavType.IntType }
            )
      ) { navBackStackEntry ->
         // 获取导航参数
            val outerIndexArg = navBackStackEntry.arguments?.getInt("outerIndex")
            val innerIndexArg = navBackStackEntry.arguments?.getInt("innerIndex")

            // 假设这里会根据 outerIndexArg 和 innerIndexArg 显示照片详情
            println("显示照片详情,outerIndex: $outerIndexArg, innerIndex: $innerIndexArg")

            // 返回操作
            val onBackClick = {
                photoNavController.popBackStack()
            }
            // 假设有一个按钮点击后 调用 onBackClick,即可实现返回
      }
    }
}
<strong>提示
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

骆贵 发表于 2025-10-16 06:40:37

用心讨论,共获提升!

咳镘袁 发表于 2025-10-26 00:45:57

感谢分享,下载保存了,貌似很强大

马璞玉 发表于 2025-10-31 03:45:40

感谢分享,下载保存了,貌似很强大

站竣凰 发表于 2025-11-3 08:30:02

不错,里面软件多更新就更好了

愿隙 发表于 2025-12-2 03:11:47

很好很强大我过来先占个楼 待编辑

副我 发表于 2026-1-3 09:37:16

东西不错很实用谢谢分享

党新苗 发表于 2026-1-5 03:22:45

过来提前占个楼

坐褐 发表于 2026-1-12 17:00:39

感谢分享,学习下。

禄磊 发表于 2026-1-14 18:26:40

收藏一下   不知道什么时候能用到

狭踝仇 发表于 2026-1-19 03:19:30

感谢发布原创作品,程序园因你更精彩

敛饺乖 发表于 2026-1-21 01:35:31

懂技术并乐意极积无私分享的人越来越少。珍惜

辗振 发表于 2026-1-21 08:14:08

懂技术并乐意极积无私分享的人越来越少。珍惜

龙正平 发表于 2026-1-21 09:41:18

用心讨论,共获提升!

恿深疏 发表于 2026-1-23 05:13:42

过来提前占个楼

梁丘艷蕙 发表于 2026-1-26 11:08:48

懂技术并乐意极积无私分享的人越来越少。珍惜

劳暄美 发表于 2026-1-27 04:45:18

yyds。多谢分享

杆树 发表于 2026-1-28 05:04:22

感谢分享,下载保存了,貌似很强大

蜴间囝 发表于 2026-1-28 08:18:01

感谢发布原创作品,程序园因你更精彩

眩疝诺 发表于 2026-1-28 09:42:04

感谢发布原创作品,程序园因你更精彩
页: [1] 2
查看完整版本: Android Compose 应用进阶:Navigation 组件、共享元素与预测性返回的深度实践