HarmonyOS实战开发-使用List组件实现导航与内容联动的效果。

1 卡片介绍

使用ArkTS语言,实现一个导航与内容二级联动的效果。

2 标题

二级联动(ArkTS)

3 介绍

本篇Codelab是主要介绍了如何基于List组件实现一个导航和内容的二级联动效果。样例主要包含以下功能:

  1. 切换左侧导航,右侧滚动到对应的内容。
  2. 滚动右侧的内容,左侧会切换对应的导航。

效果如图所示:

相关概念

  • List:列表包含一系列相同宽度的列表项。适合连续、多行呈现同类数据,例如图片和文本。
  • ListItemGroup:该组件用来展示列表item分组,宽度默认充满List组件,必须配合List组件来使用。

4 环境搭建

软件要求

  • DevEco Studio版本:DevEco Studio 3.1 Release。
  • OpenHarmony SDK版本:API version 9。

硬件要求

  • 开发板类型:润和RK3568开发板。
  • OpenHarmony系统:3.2 Release。

环境搭建

完成本篇Codelab我们首先要完成开发环境的搭建,本示例以RK3568开发板为例,参照以下步骤进行:

  1. 获取OpenHarmony系统版本:标准系统解决方案(二进制)。以3.2 Release版本为例:

2.搭建烧录环境。

  1. 完成DevEco Device Tool的安装
  2. 完成RK3568开发板的烧录

3.搭建开发环境。

  1. 开始前请参考工具准备,完成DevEco Studio的安装和开发环境配置。
  2. 开发环境配置完成后,请参考使用工程向导创建工程(模板选择“Empty Ability”)。
  3. 工程创建完成后,选择使用真机进行调测。

5 代码结构解读

本篇Codelab只对核心代码进行讲解。

├──entry/src/main/ets                // 代码区
│  ├──common
│  │  └──constants
│  │     └──Constants.ets            // 常量类
│  ├──entryability
│  │  └──EntryAbility.ts             // 程序入口类
│  ├──pages
│  │  └──IndexPage.ets               // 二级联动页面入口
│  ├──view
│  │  ├──ClassifyItem.ets            // 课程分类组件
│  │  └──CourseItem.ets              // 课程信息组件
│  └──viewmodel                          
│     ├──ClassifyModel.ets           // 导航Model
│     ├──ClassifyViewModel.ets       // 导航ViewModel
│     ├──CourseModel.ets             // 课程内容Model
│     └──LinkDataModel.ets           // 数据源Model
└──entry/src/main/resources          // 资源文件

6 二级联动实现

界面整体使用Row组件实现横向布局,分为左右两部分。均使用List组件实现对导航和内容的数据展示,导航部分固定宽度,内容部分自适应屏幕剩余宽度并用ListItemGroup完成每个导航下的内容布局。

Row() {List({ scroller: this.classifyScroller }) {ForEach(this.classifyList, (item: ClassifyModel, index: number) => {ListItem() {ClassifyItem({classifyName: item.classifyName,isSelected: this.currentClassify === index,onClickAction: () => this.classifyChangeAction(index, true)})}}, (item: ClassifyModel) => item.classifyName + this.currentClassify)}List({ scroller: this.scroller }) {ForEach(this.classifyList, (classifyItem: ClassifyModel) => {ListItemGroup({header: this.ClassifyHeader(classifyItem.classifyName),space: Constants.COURSE_ITEM_PADDING}) {ForEach(classifyItem.courseList, (courseItem: CourseModel) => {ListItem() {CourseItem({ itemStr: JSON.stringify(courseItem) })}}, courseItem => courseItem.courseId)}}, item => item.classifyId)}.sticky(StickyStyle.Header).layoutWeight(1).edgeEffect(EdgeEffect.None).onScrollIndex((start: number) => this.classifyChangeAction(start, false))
}

点击左侧导航时,右侧内容区域通过scrollToIndex方法跳转到对应的内容页面,并改变导航的选中状态。同理在滚动右侧内容的过程中,如果当前展示的ListItemGroup发生改变时,修改左侧导航的选中状态,并滚到到对应的导航item。

classifyChangeAction(index: number, isClassify: boolean) {if (this.currentClassify !== index) {// change the classify statusthis.currentClassify = index;if (isClassify) {// scroll the course scrollthis.scroller.scrollToIndex(index);} else {// scroll the classify scrollthis.classifyScroller.scrollToIndex(index);}}
}

7 总结

您已经完成了本次Codelab的学习,并了解到以下知识点:

  1. 使用List组件实现导航与内容联动的效果。
  2. ListItemGroup组件的使用方法。

为了帮助大家更深入有效的学习到鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→《HarmonyOS教学视频

HarmonyOS教学视频:语法ArkTS、TypeScript、ArkUI等.....视频教程

鸿蒙生态应用开发白皮书V2.0PDF:

获取完整版白皮书方式请点击《鸿蒙生态应用开发白皮书V2.0PDF》

鸿蒙 (Harmony OS)开发学习手册

一、入门必看

  1. 应用开发导读(ArkTS)
  2. ……

二、HarmonyOS 概念

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全
  5. ........

三、如何快速入门?《做鸿蒙应用开发到底学习些啥?》

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

四、开发基础知识

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

五、基于ArkTS 开发

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙 (Harmony OS)开发学习手册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/779118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙OS开发实战:【打造自己的搜索入口】

背景 几乎每家应用中都带有搜索功能,关于这个功能的页面不是特别复杂,但如果要追究其背后的一系列逻辑,可能是整个应用中最复杂的一个功能。今天主要实践目标,会抛开复杂的逻辑,尝试纯粹实现一个“搜索主页”&#xf…

初识Node.js与内置模块

能够知道什么是 Node.js能够知道 Node.js 可以做什么能够说出 Node.js 中的 JavaScript 的组成部分能够使用 fs 模块读写操作文件能够使用 path 模块处理路径能够使用 http 模块写一个基本的 web 服务器 一.初识Node.js 1.浏览器中的 JavaScript 的组成部分 2.Node.js 简介 …

MySQL创建表:练习题

练习题: 创建一个名为"students"的数据库,并切换到该数据库。 在"students"数据库中创建一个名为"grades"的表,包含以下字段: id: 整数类型 name: 字符串类型,学生姓名 subject: 字符串…

postgis已有表插入外部表数据带空间字段和主键

1、postgis已有表 其中gid是主键字段,geom是几何字段 2、待插入表的数据(分三种情况) (1)通过坐标将写入几何类型字段 INSERT INTO test (gid, geom, mc,lng,lat) SELECT (SELECT COALESCE(MAX(gid)<

力扣练习3.28

138. 随机链表的复制 浅拷贝和深拷贝&#xff1a; 前者新建一个数据结构&#xff0c;不创建元素副本&#xff1b; 后者不仅新建一个数据结构&#xff0c;而且新建一个数据副本。 深拷贝&#xff08;Deep Copy&#xff09;和浅拷贝&#xff08;Shallow Copy&#xff09;是在复制…

微服务demo(二)nacos服务注册与集中配置

环境&#xff1a;nacos1.3.0 一、服务注册 1、pom&#xff1a; 移步spring官网https://spring.io&#xff0c;查看集成Nacos所需依赖 找到对应版本点击进入查看集成说明 然后再里面找到集成配置样例&#xff0c;这里只截一张&#xff0c;其他集成内容继续向下找 我的&#x…

There is no getter for property named ‘deleted‘

实体类在继承BaseEntity的时候,由于没填写deleted参数名导致mybatis报错 这时候要么改application.yml里的mybatis参数&#x1f447; 要么就将BaseEntity基类的delete上加个existfalse&#x1f447;(推荐)

【ctf.show】--- md5

ctf.show_web9 1.用 dirsearch 扫目录&#xff1a;python dirsearch.py -u 网址 -e php 发现 robots.txt 2.访问 robots.txt 文件 发现 index.phps 3.访问 index.phps 发现源码 <?php $flag""; $password$_POST[password]; if(strlen…

Ventoy装机

文章目录 Ventoy安装操作系统问题U盘无法识别问题BIOS设置图片 Ventoy安装操作系统问题 当前使用的m.2&#xff08;nvm&#xff09;可以使用在台式机上。 "verification failed sercury violation"这个问题似乎与使用Ventoy创建启动盘并在启用了Secure Boot&#x…

被迫走上前端之路第六课之vue的v-for列表渲染

文章目录 语法举个栗子动态显示数组动态显示字典动态显示对象 嵌套实现 有时候我们需要动态显示一些标签重复的内容或者可迭代数据&#xff0c;如果手动一条条实现有点麻烦&#xff0c;而且代码看着不美观&#xff0c;这个时候就要用到v-for来实现 语法 其中&#xff0c;items…

速盾:cdn配置ssl

CDN&#xff08;Content Delivery Network&#xff09;是一种内容分发网络&#xff0c;它的作用是将原始服务器上的内容分发到全球各地的边缘节点上&#xff0c;以提高用户访问速度和稳定性。随着数据传输的安全性要求越来越高&#xff0c;配置SSL&#xff08;Secure Sockets L…

C++——vector类及其模拟实现

前言&#xff1a;前边我们进行的string类的方法及其模拟实现的讲解。这篇文章将继续进行C的另一个常用类——vector。 一.什么是vector vector和string一样&#xff0c;隶属于C中STL标准模板库中的一个自定义数据类型&#xff0c;实际上就是线性表。两者之间有着很多相似&…

从关键词到上下文:GPT 如何重新定义 SEO 策略

如何利用GPT技术革新SEO内容创建&#xff1f; 新的 SEO 格局 探索 SEO 的快速变化&#xff0c;重点关注从以关键字为中心的策略到更深入地了解用户意图和上下文的转变。 GPT 简介及其对内容创建、用户参与和搜索引擎优化 (SEO) 的革命性影响。 了解 GPT&#xff1a;技术范式转…

【数据结构刷题专题】—— 二分查找

二分查找 二分查找模板题&#xff1a;704. 二分查找 二分查找前提&#xff1a; 有序数组数组中无重复元素 左闭右闭&#xff1a; class Solution { public:int search(vector<int>& nums, int target) {int left 0;int right nums.size() - 1;while (left <…

python基础知识3——列表和元组

python基础知识学习笔记之常用数据类型操作 1、列表 1.1、列表的概念和定义 概念&#xff1a;列表是有序的可变的元素集合。 定义&#xff1a; 方式1&#xff1a;[ 元素1, 元素2…] names ["zhangsan", "lisi", "wangwu"] print(names, type…

网络爬虫框架Scrapy的入门使用

Scrapy的入门使用 Scrapy概述引擎&#xff08;Engine&#xff09;调度器&#xff08;Scheduler&#xff09;下载器&#xff08;Downloader&#xff09;SpiderItem Pipeline 基本使用安装scrapy创建项目定义Item数据模型对象创建爬虫(Spider)管道pipeline来保存数据启动爬虫 其他…

消费盲返:新型返利模式引领购物新潮流

消费盲返&#xff0c;一种引领潮流的新型消费返利模式&#xff0c;其核心在于&#xff1a;消费者在平台选购商品后&#xff0c;不仅能享受优惠价格&#xff0c;更有机会获得后续订单的部分利润作为额外奖励。这种创新的返利机制&#xff0c;既提升了消费者的购物体验&#xff0…

AUTOSAR关于内存栈的分层及描述

首先关于关于内存栈的分层&#xff1a;如下图所示&#xff0c;Nvm靠近RTE的&#xff1b;MemIf居中&#xff0c;EA和FEE被包含其中。 其次关于这三层的缩写&#xff1a;可以看到EEPROM的模拟和EEPROM的抽象层。 我们可以看到 大概的数据流&#xff1a; 和大致的结构分层作用&am…

使用argocd作为cd流程

一、前言 讲述关于argocd在cicd流程中的使用&#xff0c;ci这里使用gitlabjenkins流水线的方式&#xff0c;jenkins用于拉代码打包、构建镜像、变更yaml文件的镜像、推送变更的yaml文件到gitlab的gitops仓库中&#xff0c;最后再有argocd实现cd流程&#xff0c; 二、使用 关于…

​网络安全相关证书资料​——OSCP、CISP-PTE

网络安全相关证书有哪些&#xff1f;——就实战型看&#xff0c;OSCP、CISP-PTE &#xff08;国家注册渗透测试工程师&#xff09;最好。 网络安全相关证书有哪些&#xff1f; 网络安全相关证书有哪些呢&#xff1f;了解一下&#xff01; 1. CISP &#xff08;国家注册信息安全…