探索arkui(2)--- 布局(列表)--- 2(支持分组/实现响应滚动位置)

news2024/11/27 4:20:40

前端开发布局是指前端开发人员宣布他们开发的新网站或应用程序正式上线的活动。在前端开发布局中,开发人员通常会展示新网站或应用程序的设计、功能和用户体验,并向公众宣传新产品的特点和优势。前端开发布局通常是前端开发领域的重要事件,吸引了广泛的关注和关注。通过前端开发布局,开发人员可以推广他们的新产品,增加用户的关注和使用,并提高自己的品牌知名度。同时,前端开发布局也为用户提供了了解和体验新产品的机会,帮助他们更好地了解和使用新的网站或应用程序。鸿蒙开发亦是如此。

列表


官网描述 

列表是一种复杂的容器,当列表项达到一定数量,内容超过屏幕大小时,可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集,例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求(如通讯录、音乐列表、购物清单等)。

使用列表可以轻松高效地显示结构化、可滚动的信息。通过在List组件中按垂直或者水平方向线性排列子组件ListItemGroup或ListItem,为列表中的行或列提供单个视图,或使用ForEach迭代一组行或列,或混合任意数量的单个视图和ForEach结构,构建一个列表。List组件支持使用条件渲染、循环渲染、懒加载等渲染控制方式生成子组件。

我的理解 

有点类似于只有一列的表格,超出屏幕自带滚动条

代码 

import util from '@ohos.util';

class Contact {
  key: string = util.generateRandomUUID(true);
  name: string;
  icon: Resource;

  constructor(name: string, icon: Resource) {
    this.name = name;
    this.icon = icon;
  }
}

const alphabets = ['#', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
  'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];

@Entry
@Component
struct ContactsList {
  @State selectedIndex: number = 0;

  @Builder itemHead(text: string) {
    // 列表分组的头部组件,对应联系人分组A、B等位置的组件
    Text(text)
      .fontSize(20)
      .backgroundColor('#fff1f3f5')
      .width('100%')
      .padding(5)
  }

  contactsGroups: object[] = [
    {
      title: 'A',
      contacts: [
        new Contact('艾佳', $r('app.media.app_icon')),
        new Contact('艾佳2', $r('app.media.app_icon')),
        new Contact('艾佳3', $r('app.media.app_icon')),
        new Contact('艾佳4', $r('app.media.app_icon')),
        new Contact('安安1', $r('app.media.app_icon')),
        new Contact('安安2', $r('app.media.app_icon')),
        new Contact('安安3', $r('app.media.app_icon')),
        new Contact('安安21', $r('app.media.app_icon')),
        new Contact('安安22', $r('app.media.app_icon')),
        new Contact('安安23', $r('app.media.app_icon')),
        new Contact('安安24', $r('app.media.app_icon')),
        new Contact('安安25', $r('app.media.app_icon')),
        new Contact('安安26', $r('app.media.app_icon')),
        new Contact('安安27', $r('app.media.app_icon')),
        new Contact('安安37', $r('app.media.app_icon')),
        new Contact('安安47', $r('app.media.app_icon')),
        new Contact('安安57', $r('app.media.app_icon')),
        new Contact('Angela', $r('app.media.app_icon')),
        new Contact('Angela2', $r('app.media.app_icon')),
        new Contact('Angela3', $r('app.media.app_icon')),
        new Contact('Angela4', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
        new Contact('Angela5', $r('app.media.app_icon')),
      ],
    },
    {
      title: 'B',
      contacts: [
        new Contact('白叶', $r('app.media.app_icon')),
        new Contact('伯明', $r('app.media.app_icon')),
        new Contact('伯明2', $r('app.media.app_icon')),
        new Contact('伯明3', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
        new Contact('伯明4', $r('app.media.app_icon')),
      ],
    },
  ]
  private listScroller: Scroller = new Scroller();

  build() {
    Stack({ alignContent: Alignment.End }) {
      List() {
        ForEach(this.contactsGroups, item => {
          ListItemGroup({ header: this.itemHead(item.title) }) {
            ForEach(item.contacts, contact => {
              ListItem() {
                Row() {
                  Image(contact.icon)
                    .width(40)
                    .height(40)
                    .margin(10)
                  Text(contact.name).fontSize(20)
                }
              }
            }, item => item.key)
          }
        })
      }.onScrollIndex((firstIndex: number) => {
        this.selectedIndex = firstIndex + 1
      }).divider({
        strokeWidth: 1,
        startMargin: 60,
        endMargin: 10,
        color: '#ffe9f0f0'
      }).scrollBar(BarState.Auto)
      .sticky(StickyStyle.Header)

      AlphabetIndexer({ arrayValue: alphabets, selected: 0 })
        .selected(this.selectedIndex)
    }
  }
}

效果

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

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

相关文章

通义灵码,阿里巴巴的编程辅助工具

一、官网 通义灵码_智能编码助手_AI编程_人工智能-阿里云 二、安装VSCode 如何下载安装VSCode 三、VSCode安装通义灵码 1.访问扩展详情界面 方式1 访问通义灵码安装教程页面 方法2 访问VSCode市场中的TONGYI Lingma 点击 Install 按钮访问扩展详情界面 2.打开VSCode …

udp多点通信-广播-组播

单播 每次只有两个实体相互通信,发送端和接收端都是唯一确定的。 广播 主机之间的一对多的通信所有的主机都可以接收到广播消息(不管你是否需要)广播禁止穿过路由器(只能做局域网通信)只有UDP可以广播广播地址 有效网络号全是1的主机号 192.1…

《成为一名优秀的架构师:从基础到实践》

文章目录 前言《高并发架构实战:从需求分析到系统设计》《架构师的自我修炼:技术、架构和未来》《中台架构与实现:基于DDD和微服务》《分布式系统架构:架构策略与难题求解》《流程自动化实战:系统架构和软件开发视角 》…

人工智能-深度学习之序列模型

想象一下有人正在看网飞(Netflix,一个国外的视频网站)上的电影。 一名忠实的用户会对每一部电影都给出评价, 毕竟一部好电影需要更多的支持和认可。 然而事实证明,事情并不那么简单。 随着时间的推移,人们对…

使用VC++实现分段线性变换,直方图均衡化、锐化处理(使用拉普拉斯算子)

图像锐化1 实验要求 5.1实验目的、要求 实验目的: (1)掌握图像增强的原理与相关方法。 (2)能使用VC实现图像增强的一些相关功能。 实验要求: A部分: (1)对一幅256级灰度…

Linux | 进程间通信

目录 前言 一、进程间通信的基本概念 二、管道 1、管道的基本概念 2、匿名管道 (1)原理 (2)测试代码 (3)读写控制相关问题 a、读端关闭 b、写端关闭 c、读快写慢 d、读慢些快 (4&a…

线程的面试八股

Callable接口 Callable是一个interface,相当于给线程封装了一个返回值,方便程序猿借助多线程的方式计算结果. 代码示例: 使用 Callable 版本,创建线程计算 1 2 3 ... 1000, 1. 创建一个匿名内部类, 实现 Callable 接口. Callable 带有泛型参数. 泛型参数表示返回值的类型…

高级数据结构——树状数组

树状数组(Binary Index Tree, BIT),是一种一般用来处理单点修改和区间求和操作类型的题目的数据结构,时间复杂度为O(log n)。 对于普通数组来说,单点修改的时间复杂度是 O(1),但区间求和的时间复杂度是 O(n…

【备忘】websocket学习之挖坑埋自己

背景故事 以前没有好好学习过websocket,只知道它有什么用途,也知道是个好东西,平时在工作中没用过,所以对它并不知所以然。如今要做个自己的项目,要在付款的时候实时播报声音。自己是个开发者,也不想用别人…

类加载中的执行顺序

结论: 先静态再实例 实例化一个子类(这个颜色主要是实例化会执行的部分): 父类静态属性->父类静态代码块->子类静态属性->子类静态代码块->父类代码块&…

jQuery【jQuery树遍历、jQuery动画(一)、jQuery动画(二)】(四)-全面详解(学习总结---从入门到深化)

目录 jQuery树遍历 jQuery动画(一) jQuery动画(二) jQuery树遍历 1、 .children() 获得子元素&#xff0c;可以传递一个选择器参数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-…

【Effective C++ 笔记】(四)设计与声明

【四】设计与声明 条款18 &#xff1a; 让接口容易被正确使用&#xff0c;不易被误用 Item 18: 让接口容易被正确使用&#xff0c;不易被误用 Make interfaces easy to use correctly and hard to use incorrectly. “让接口容易被正确使用&#xff0c;不易被误用”&#xff0…

OpenCV基础应用(3)— 把.png图像保存为.jpg图像

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。本节课就手把手教你如何把.png图像保存为.jpg图像&#xff0c;希望大家学习之后能够有所收获~&#xff01;&#x1f308; 目录 &#x1f680;1.技术介绍 &#x1f680;2.实现代码 &#x1f680;1.技术介绍 如果在电脑某…

web缓存-----squid代理服务

squid相关知识 1 squid的概念 Squid服务器缓存频繁要求网页、媒体文件和其它加速回答时间并减少带宽堵塞的内容。 Squid代理服务器&#xff08;Squid proxy server&#xff09;一般和原始文件一起安装在单独服务器而不是网络服务器上。Squid通过追踪网络中的对象运用起作用。…

渗透测试--实战若依ruoyi框架

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

YOLOv3 学习记录

文章目录 简介整体介绍整体架构图 网络架构的改进Backbone 的改进FPNAnchor 机制 坐标表示与样本匹配目标边界框的预测正负样本匹配 损失函数 简介 关注目标在哪里 目标是什么 目标检测的发展路径&#xff1a; proposal 两阶段 --> anchor-base/ anchor-free --> nms f…

SpringCloud微服务:Nacos的集群、负载均衡、环境隔离

目录 集群 在user-service的yml文件配置集群 启动服务 负载均衡 order-service配置集群 设置负载均衡 当本地集群的服务挂掉时 访问权重 环境隔离 1、Nacos服务分级存储模型 一级是服务&#xff0c;例如userservice 二级是集群&#xff0c;例如杭州或上海 …

计算机网络的发展

目录 一、计算机网络发展的四个阶段 1、第一阶段&#xff1a;面向终端的计算机网络&#xff08;20世纪50年代&#xff09; 2、第二阶段&#xff1a;计算机—计算机网络&#xff08;20世纪60年代&#xff09; 3、第三阶段&#xff1a;开放式标准化网络&#xff08;20世纪70年…

【2023最全教程】python+appium自动化测试元素定位(建议收藏)

关于app自动化测试&#xff0c;元素定位工具有三个&#xff1a; appium自带的Appium Inspector工具 Android ADT原生的工具 python版uiautomator2中的weditor 由于我常用的是前两个&#xff0c;所以下面只介绍前面两种元素定位工具&#xff08;以下内容中均以微博为例子&am…

idea中把spring boot项目打成jar包

打jar包 打开项目&#xff0c;右击项目选中Open Module Settings进入project Structure 选中Artifacts&#xff0c;点击中间的加号&#xff08;Project Settings->Artifacts->JAR->From modules with dependencies &#xff09; 弹出Create JAR from Modules&#…