HarmonyOS NEXT应用开发案例——二级联动
介绍
本示例主要介绍了List组件实现二级联动(Cascading List)的场景。 该场景多用于短视频中拍摄风格的选择、照片编辑时的场景的选择。
效果图预览

使用说明:
- 滑动二级列表侧控件,一级列表随之滚动。
- 点击一级列表,二级列表随之滚动。
实现思路
- 构造懒加载数据源类型MyDataSource。
- 一二级列表分别绑定不同的Scroller对象,一级列表(tagLists)绑定classifyScroller对象,二级列表绑定scroller对象。
@Component
export struct SecondaryLinkExample {
private classifyScroller: Scroller = new Scroller(); // 一级列表Scroller对象
private scroller: Scroller = new Scroller(); // 二级列表Scroller对象
build() {
...
Row() {
// 一级列表
List({ scroller: this.classifyScroller, initialIndex: 0 }) {
...
}
}
}
}
- 通过循环,构造一二级列表数据。
ForEach(this.tagLists, (item: string, index: number) => {
ListItem() {
...
}
})
- 点击一级列表后,通过一级列表的索引获取二级列表的索引,调用scrollToIndex方法将一二级列表滚动到指定索引值。
// 根据一级列表索引值获取二级列表索引值
findItemIndex(index: number): number {
return this.records[index];
}
build(){
Column() {
...
}.onClick(() => { // 一级列表点击事件
this.currentTagIndex = index;
let itemIndex = this.findItemIndex(index);
this.scroller.scrollToIndex(itemIndex, true);
})
}
- 滑动二级列表触发组件滚动事件后,获取到列表可视区域第一个item对应的索引值,通过二级列表索引获取一级列表索引,调用scrollToIndex方法将一级列表滚动到指定索引值。
@State @Watch('onIndexChange') currentTagIndex: number = 0; // 一级列表焦点索引值
private isClickTagList: boolean = false; // 是否点击一级列表
private classifyScroller: Scroller = new Scroller(); // 一级列表Scroller对象
// 根据二级列表索引值获取对应一级列表索引
findClassIndex(index: number): number {
...
}
build() {
List() {
...
}.onScrollIndex((start: number) => {
let currentClassIndex = this.findClassIndex(start);
// 当前二级列表元素是否属于当前一级列表类
if (currentClassIndex !== this.currentTagIndex && this.isClickTagList !== true) {
this.currentTagIndex = currentClassIndex;
this.classifyScroller.scrollToIndex(currentClassIndex, true); // 滚动到指定位置
}
})
}
高性能知识点
本示例使用了LazyForEach进行数据懒加载,List布局时会根据可视区域按需创建ListItem组件,并在ListItem滑出可视区域外时销毁以降低内存占用。
工程结构&模块类型
secondarylinkage // har
|---pages
| |---DataType.ets // 数据类型定义
| |---SecondaryLinkExample.ets // 二级联动功能实现页面
模块依赖
当前场景依赖common模块的FunctionDescription组件,主要用于功能场景文本介绍。详细可参考FunctionDescription文件。
参考资料
学习鸿蒙开发势在必行。鸿蒙开发可参考学习文档:https://qr21.cn/FV7h05
HarmonyOS NEXT应用开发案例——二级联动的更多相关文章
- iOS开发tableview二级联动的细节实现中注意的细节总结
首先说网络慢带来的数据显示问题 可以通过判断请求参数是否一致来刷新tableview. SJBCategaryModel * categaryModel = self.categarys[Catega ...
- JavaScript日历控件开发 C# 读取 appconfig文件配置数据库连接字符串,和配置文件 List<T>.ForEach 调用异步方法的意外 ef 增加或者更新的习惯思维 asp.net core导入excel 一个二级联动
JavaScript日历控件开发 概述 在开篇之前,先附上日历的代码地址和演示地址,代码是本文要分析的代码,演示效果是本文要实现的效果代码地址:https://github.com/aspwebc ...
- JQuery的使用案例(二级联动,隔行换色,轮播图,广告插入)
JQuery的使用案例 (一)利用JQuery完成省市二级联动 第一步:确定事件(change事件),在绑定的函数里面获取用户选择的省份 第二步:创建二维数组来存储省份和城市 第三步:遍历二维数组中的 ...
- jQuery实现的3个基础案例(仿QQ列表分组,二级联动下拉框,模拟员工信息管理系统)
1.仿QQ列表分组 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...
- python测试开发django-57.xadmin选项二级联动
前言 当我们选择项目分类的时候,一个项目下关联多个模块,同时有这两个选项框的时候,需要实现选中一个项目,模块里面自动删除出该项目下的模块,如下图这种 解决基本思路: 1.写个jqeury脚本监听cha ...
- iOS开发之"省市"二级联动的数据组织(PHP版)以及PickerView的实现与封装
之所以要发表这篇博客,还源于最近的开发工作所实现的一个小的Demo, 当然这个Demo不会涉及工作中App的一些内容,下方要实现的Demo是通用的.因为项目需求的迭代,要求在银行卡绑定中添加支行所在的 ...
- (实用篇)jQuery+PHP+MySQL实现二级联动下拉菜单
二级联动下拉菜单选择应用在在很多地方,比如说省市下拉联动,商品大小类下拉选择联动.本文将通过实例讲解使用jQuery+PHP+MySQL来实现大小分类二级下拉联动效果. 先看下效果 大类: 前端技术 ...
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之五 模块(菜单)管理源码分享
http://www.cnblogs.com/huyong/p/3454012.html 使用Jquery+EasyUI 进行框架项目开发案例讲解之五 模块(菜单)管理源码分享 在上四篇文章 ...
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之四 组织机构管理源码分享
http://www.cnblogs.com/huyong/p/3404647.html 在上三篇文章 <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...
- js-day04--Ajax应用--二级联动
Ajax概述和实用需求 Ajax介绍/阿贾克斯:一.Ajax不是一项具体的技术,而是几门技术的综合应用. Javascript.XHTML和CSS.DOM.XML和XMLHttpRequest.二.A ...
随机推荐
- Android视音频基础知识
学术概念 采样和采样频率: ⼀秒钟内采样的次数称为采样频率.采样频率越⾼,越接近原始信号,但是也加⼤了运算处理的复杂度.根据Nyquist采样定理,要想重建原始信号,采样频率必须⼤于信号中最⾼频率的两 ...
- ubuntu无法安装lrzsz
ubuntu无法安装lrzsz root@ubuntu:/opt/test# apt install lrzsz Reading package lists... Done Building depe ...
- Adapter分组封装
YCGroupAdapter 01.前沿说明 1.1 案例展示效果 1.2 该库功能和优势 1.3 相关类介绍说明 02.如何使用 2.1 如何引入 2.2 最简单使用 2.3 使用建议 03.常用a ...
- DialogFragment源码分析
目录介绍 1.最简单的使用方法 1.1 官方建议 1.2 最简单的使用方法 1.3 DialogFragment做屏幕适配 2.源码分析 2.1 DialogFragment继承Fragment 2. ...
- Cesium之原生控件
1. 控件概述 Cesium的开始,基本上是从new一个Viewer开始 // ... <div id="cesiumContainer"></div> & ...
- Cesium渲染模块之Texture
1. 引言 Cesium是一款三维地球和地图可视化开源JavaScript库,使用WebGL来进行硬件加速图形,使用时不需要任何插件支持,基于Apache2.0许可的开源程序,可以免费用于商业和非商业 ...
- 记录--为什么要使用 package-lock.json?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 随着JavaScript在现代软件开发中的日益重要地位,Node.js生态系统中的npm成为了不可或缺的工具.在npm管理依赖的过程 ...
- 记录--六道题理解Vue2 和 Vue3 的响应式原理比对
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 技术栈是 Vue 的同学,在面试中难免会被问到 Vue2 和 Vue3 的相关知识点的实现原理和比较,面试官是步步紧逼,一环扣一环. ...
- KingbaseES 服务器运行参数配置
Kingbase 服务器运行参数配置 说明: KingbaseES 数据库中,服务器运行参数配和需改有多种方式和注意事项,根据不同的分类配置,修改配置方式不同.关于服务器参数分类请参照[Kingbas ...
- (1,3,4,2,5)小和问题【Java】
01[1,3,4,2,5]求小和 从右往左看:左边比右边小的加和到一起! 1 左边没有数 0 3 1 4 1+3 2 1 5 1+3+4+2 从左往右看:有几个数右边比左边大 1 4个数: 3 4 2 ...