广告
返回顶部
首页 > 资讯 > 移动开发 >JetpackComposeNavigation导航实现流程
  • 763
分享到

JetpackComposeNavigation导航实现流程

JetpackComposeNavigationJetpackComposeNavigation导航 2023-01-04 18:01:28 763人浏览 独家记忆
摘要

目录Navigation 快速上手编写欲跳转的两个页面路由表配置总路由主页面调用总路由跳转逻辑完善Navigation 快速上手 下面案例简要展示使用 Compose 版本的 Nav

Navigation 快速上手

下面案例简要展示使用 Compose 版本的 Navigation 库来实现两个页面之间的跳转

这是完整的结构(忽略掉红线划过的那个包)

编写欲跳转的两个页面

编写 Demo1 页面

子页面使用多个 composable 组件相组合的方法一一装配起来

Demo1main 渲染整个页面,他接受一个 NavController 对象,用于操纵导航相关的方法

可以注意到 Button 里面的点击事件还没写,后续我们写好路由后再回来编写跳转逻辑

@Composable
fun Demo1main(navController: NavController) {
    body(navController)
}
@Composable
private fun body(navController: NavController) {
    Column(
        modifier = Modifier
            .fillMaxSize()
    ) {
        Button(onClick = {
            // 跳转逻辑
        }) {
            Text(
                text = "前往demo2",
                modifier = Modifier.fillMaxWidth(),
                textAlign = TextAlign.Center
            )
        }
    }
}

编写 Demo2 页面

依葫芦画瓢

@Composable
fun Demo2main(navController: NavController) {
    body(navController)
}
@Composable
private fun body(navController: NavController) {
    Column(
        modifier = Modifier
            .fillMaxSize()
    ) {
        Button(onClick = {
            // 这里也写跳转逻辑!
        }) {
            Text(
                text = "前往demo1",
                modifier = Modifier.fillMaxWidth(),
                textAlign = TextAlign.Center
            )
        }
    }
}

路由表配置

编写单例类 RouteConfig 用来存储路由名称(等同于 Vue-router 中我们设置的 path)

后续为便于理解,统称为 path

object RouteConfig {
    // 主页面
    const val ROUTE_MAIN = "main"
    // 两个跳转页面
    const val ROUTE_DEMO1 = "demo1"
    const val ROUTE_DEMO2 = "demo2"
}

总路由

创建文件 MainNav 并在里面实现路由导航的总逻辑

由于我们刚刚入门,路由表可以很简单,按照以下结构即可

  • rememberNavController 存储所有 navcontroller 状态
  • NavHost 一个容器,便于内部页面的切换,在里面注册所有页面
@Composable
fun AppNav() {
    // 存储navigation状态
    val navController = rememberNavController()
    // navhost容器
    // startDestination表示起始页的path,这里我们指定demo1作为起始页
    NavHost(navController = navController, startDestination = RouteConfig.ROUTE_DEMO1) {
        // 依次传入path并注册三个页面
        composable(RouteConfig.ROUTE_MAIN) {
            MainActivity()
        }
        composable(RouteConfig.ROUTE_DEMO1) {
            Demo1main(navController)
        }
        composable(RouteConfig.ROUTE_DEMO2) {
            Demo2main(navController)
        }
    }
}

主页面调用总路由

对于 Kotlin 而言,非常简单,直接调用定义好的总路由方法即可

因为总路由默认起始页为 demo1,故渲染 mainactivity 后就会立即载入 demo1 页面!

class MainActivity() : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            DemoComposeTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colors.background
                ) {
                    // 一键调用,方便快捷
                    AppNav()
                }
            }
        }
    }
}

跳转逻辑完善

嘿!还记得我们之前置空的按钮跳转逻辑吗?

我们已经配置完了所有路由,为此,仅需将以下代码添加到按钮点击事件即可跳转到指定页面了!

// 写于demo1页面,点击按钮后跳转到demo2页面
navController.navigate(RouteConfig.ROUTE_DEMO2)

为便于大家理解,现给出 demo1.kt 目前的完整代码

@Composable
fun Demo1main(navController: NavController) {
    body(navController)
}
@Composable
private fun body(navController: NavController) {
    Column(
        modifier = Modifier
            .fillMaxSize()
    ) {
        Button(onClick = {
            navController.navigate(RouteConfig.ROUTE_DEMO2)
        }) {
            Text(
                text = "前往demo2",
                modifier = Modifier.fillMaxWidth(),
                textAlign = TextAlign.Center
            )
        }
    }
}

demo2 的跳转逻辑只需要修改对应的 path 即可

目前仅学到了最简单的 navigate 跳转,后续还有带参跳转,请关注进阶版本!

到此这篇关于JetpackCompose Navigation导航实现流程的文章就介绍到这了,更多相关JetpackCompose Navigation内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JetpackComposeNavigation导航实现流程

本文链接: https://www.lsjlt.com/news/176735.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JetpackComposeNavigation导航实现流程
    目录Navigation 快速上手编写欲跳转的两个页面路由表配置总路由主页面调用总路由跳转逻辑完善Navigation 快速上手 下面案例简要展示使用 Compose 版本的 Nav...
    99+
    2023-01-04
    JetpackCompose Navigation JetpackCompose Navigation导航
  • css怎样现流程导航效果
    这篇文章主要介绍css怎样现流程导航效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!css实现流程导航效果,具体内容如下所示:::tip 使用纯css线上 流程导航效果。    本文统...
    99+
    2023-06-08
  • Vuetagsview实现多页签导航功能流程详解
    目录一、效果图二、实现思路1. 新建 tags-view.js2. 在Vuex里面引入tags-view.js3. 新建tabsView组件4. 新建ScrollPane组件5. 引...
    99+
    2022-11-13
  • Vue中的路由导航守卫导航解析流程
    目录全局前置守卫全局解析守卫全局后置钩子路由独享的守卫组件内的守卫可用的配置 API使用组合 API完整的导航解析流程正如其名,vue-router 提供的导航守卫主要用来通过跳转或...
    99+
    2023-05-16
    Vue路由导航守卫 Vue路由守卫
  • Python轮播图与导航栏功能的实现流程全讲解
    目录轮播图功能安装依赖模块上传文件相关配置注册home子应用创建轮播图的model模型创建Banner的序列化器创建Banner的视图类配置Banner的路由配置Xadmin配置文件...
    99+
    2022-11-11
  • Bootstrap中导航条和分页导航如何实现
    这篇文章主要介绍Bootstrap中导航条和分页导航如何实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 本篇文章带大家了解一下Bootstrap中的导...
    99+
    2022-10-19
  • css实现导航菜单
    随着互联网的快速发展,网页设计越来越重视用户体验。其中,导航菜单是网站设计中不可或缺的一部分。正确的导航菜单能够方便用户找到所需的信息,提高用户体验和网站访问率。然而,如何实现一个美观、易用的导航菜单呢?这就需要我们熟练掌握CSS技术了。本...
    99+
    2023-05-21
  • AmazeUI导航如何实现
    小编给大家分享一下AmazeUI导航如何实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!AmazeUI导航的示例代码,具体如下:<!doctype&nbs...
    99+
    2023-06-09
  • vue怎么实现导航
    本文小编为大家详细介绍“vue怎么实现导航”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue怎么实现导航”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。使用$route.path设置默认选中的导航,但是设置之后...
    99+
    2023-07-04
  • css怎么实现横向导航和竖向导航栏
    小编给大家分享一下css怎么实现横向导航和竖向导航栏,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   一、竖向导航   &...
    99+
    2022-10-19
  • css如何实现垂直导航栏和水平导航栏
    这篇文章给大家分享的是有关css如何实现垂直导航栏和水平导航栏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   垂直导航栏的样式   <!DOCTYPEhtml>...
    99+
    2022-10-19
  • JavaScript制作楼层导航效果流程详解
    目录本期目标1. 功能实现1.1 结构层1.2 样式层1.3 行为层1.3.1 楼层跳转1.3.2 楼层监听2. 效果预览3. 项目代码本期目标 使用JavaScript制作楼层导航...
    99+
    2022-11-12
  • 微信小程序实现左侧导航栏
    本文实例为大家分享了微信小程序实现左侧导航栏的具体代码,供大家参考,具体内容如下 wxml <view class="content">       <view c...
    99+
    2022-11-13
  • 微信小程序实现侧边导航栏
    本文实例为大家分享了微信小程序实现侧边导航栏的具体代码,供大家参考,具体内容如下 效果图 wxml <view class='productNav'>   <!-...
    99+
    2022-11-13
  • CSS3如何实现导航栏
    小编给大家分享一下CSS3如何实现导航栏,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!上面是一个效果图,代码在下面:htmlXM...
    99+
    2022-10-19
  • Android使用ViewPager实现导航
    首先先了解ViewPager实现的出效果是能够使视图左右滑动。 ViewPager在XML文件中的声明和其他一些控件的声明有点儿不一样 而android.support.v4....
    99+
    2022-06-06
    viewpager Android
  • Javascript实现简易导航栏
    本文实例为大家分享了Javascript实现简易导航栏的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html lang="en">...
    99+
    2022-11-12
  • vue实现导航收缩框
    本文实例为大家分享了vue实现导航收缩框的具体代码,供大家参考,具体内容如下 代码: <template>   <div class="leftAside">...
    99+
    2022-11-13
  • flutter实现底部导航栏
    本文实例为大家分享了flutter实现底部导航栏的具体代码,供大家参考,具体内容如下 一.flutter底部导航栏常用组件BottomNavigationBar 属性介绍 Botto...
    99+
    2022-11-13
  • Angular实现二级导航栏
    本文实例为大家分享了Angular实现二级导航栏的具体代码,供大家参考,具体内容如下 1、将菜单放入数据库: 模拟放到该路径下:src/assets/json/header.json...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作