【Harmony3.1/4.0】笔记二

概述

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

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

列表的综合学习

代码如下


import util from '@ohos.util'
//创建实体类联系人
class Contact{
    key:string=util.generateRandomUUID(true); //随机生成UUID
    name:string;
    icon:Resource;
    icon1:Resource=$r("app.media.img21");

  //定义构造方法
  constructor(name:string,icon:Resource) {
    this.name=name;
    this.icon=icon;
  }
}

@Entry
@Component
struct Two{
  private  icons:Resource[]=[$r("app.media.img1"),$r("app.media.img2"),$r("app.media.img3"),$r("app.media.img4"),
  $r("app.media.img5"),$r("app.media.img6"),$r("app.media.img7"),$r("app.media.img8"),
  $r("app.media.img9"),$r("app.media.img10"),$r("app.media.img11"),$r("app.media.img12"),
  $r("app.media.img13"),$r("app.media.img14"),$r("app.media.img15"),$r("app.media.img16"),
  $r("app.media.img17"),$r("app.media.img18"),$r("app.media.img19"),$r("app.media.img20")]
  private names:string[]=["马云","任正非","李彦宏","张磊","刘强东",
    "奶茶妹","马化腾","鸿祎","余大炮","马斯克",
    "奥巴马","李斌","雷军","成龙","刘德华",
    "巴菲特","张磊","汪涵","大张伟","李连杰"]
  @State contacts:Contact[]=[
    new Contact(this.names[0],this.icons[0]),new Contact(this.names[1],this.icons[1]),
    new Contact(this.names[2],this.icons[2]),new Contact(this.names[3],this.icons[3]),
    new Contact(this.names[4],this.icons[4]),new Contact(this.names[5],this.icons[5]),
    new Contact(this.names[6],this.icons[6]),new Contact(this.names[7],this.icons[7]),
    new Contact(this.names[8],this.icons[8]),new Contact(this.names[9],this.icons[9]),
    new Contact(this.names[10],this.icons[10]),new Contact(this.names[11],this.icons[11]),
    new Contact(this.names[12],this.icons[12]),new Contact(this.names[13],this.icons[13]),
    new Contact(this.names[14],this.icons[14]),new Contact(this.names[15],this.icons[15]),
    new Contact(this.names[16],this.icons[16]),new Contact(this.names[17],this.icons[17]),
    new Contact(this.names[18],this.icons[18]),new Contact(this.names[19],this.icons[19]),
  ];

  //通过封装实体类的方式,生成创建列表
  build(){
    Column(){
      Text("联系人列表").width("100%").height(60).backgroundColor("#800f")
        .fontSize(25).fontColor(Color.White).fontWeight(FontWeight.Bold)
        .textAlign(TextAlign.Center)
      //列表设置宽度100%,高度根据内容自适应
      List({space:10}){
        ForEach(this.contacts,(item:Contact,index)=>{
          ListItem(){
            Row(){
              Image(item.icon).width(40).height(40).margin(10)
              Text(item.name).fontSize(20).margin({left:20}).layoutWeight(1)
              Image(item.icon1).width(40).height(40).margin(10).backgroundColor("#6aaa").borderRadius(20)
            }.width("100%")
          }
        },item=>item.key)
      }.width("100%").divider({
        strokeWidth:1,
        color:"#aaa",
        startMargin:10,
        endMargin:10
      }).scrollBar(BarState.Auto)
    }.width("100%")
  }
}

二级列表的综合学习

选择联系人,实现左滑显示删除效果

联系人分组联动效果

一键回归顶部效果

代码如下

//二级列表的实现
import util from '@ohos.util'
//创建实体类联系人
class Contact{
  key:string=util.generateRandomUUID(true); //随机生成UUID
  name:string;
  icon:Resource;
  icon1:Resource=$r("app.media.img21");

  //定义构造方法
  constructor(name:string,icon:Resource) {
    this.name=name;
    this.icon=icon;
  }
}

@Entry
@Component
struct Three{

  private  icons:Resource[]=[$r("app.media.img1"),$r("app.media.img2"),$r("app.media.img3"),$r("app.media.img4"),
  $r("app.media.img5"),$r("app.media.img6"),$r("app.media.img7"),$r("app.media.img8"),
  $r("app.media.img9"),$r("app.media.img10"),$r("app.media.img11"),$r("app.media.img12"),
  $r("app.media.img13"),$r("app.media.img14"),$r("app.media.img15"),$r("app.media.img16"),
  $r("app.media.img17"),$r("app.media.img18"),$r("app.media.img19"),$r("app.media.img20")]
  private names:string[]=["马云","任正非","李彦宏","张磊","刘强东",
    "奶茶妹","马化腾","鸿祎","余大炮","马斯克",
    "奥巴马","李斌","雷军","成龙","刘德华",
    "巴菲特","张磊","汪涵","大张伟","李连杰"]
  private groups:object[]=[
    { title:"A",
    contacts:[new Contact(this.names[0],this.icons[0]),new Contact(this.names[1],this.icons[1]),
      new Contact(this.names[2],this.icons[2]),new Contact(this.names[3],this.icons[3]),
      new Contact(this.names[4],this.icons[4]),new Contact(this.names[5],this.icons[5])]},
    { title:"B",
      contacts:[new Contact(this.names[6],this.icons[6]),new Contact(this.names[7],this.icons[7]),
        new Contact(this.names[8],this.icons[8]),new Contact(this.names[9],this.icons[9])]},
    { title:"C",
      contacts:[new Contact(this.names[10],this.icons[10]),new Contact(this.names[11],this.icons[11]),
        new Contact(this.names[12],this.icons[12]),new Contact(this.names[13],this.icons[13]),
        new Contact(this.names[14],this.icons[14]),new Contact(this.names[15],this.icons[15]),
        new Contact(this.names[16],this.icons[16])]},
    { title:"D",
      contacts:[new Contact(this.names[17],this.icons[17]),
        new Contact(this.names[18],this.icons[18]),new Contact(this.names[19],this.icons[19])]},

  ]

  //使用层布局添加滚动定位按钮
  private listScroller: Scroller = new Scroller();

  @Builder itemEnd(index: number) {
    // 侧滑后尾端出现的组件
    Button({ type: ButtonType.Circle }) {
      Image($r('app.media.del'))
        .width(25)
        .height(25)
    }.width(40).height(40).backgroundColor("#8aaa")
    .onClick(() => {
      this.groups.splice(index, 1);
    })
  }

  @Builder itemHead(text: string) {
    // 列表分组的头部组件,对应联系人分组A、B等位置的组件
    Text(text)
      .fontSize(20)
      .backgroundColor('#fff1f3f5')
      .width('100%')
      .padding(5)
  }
  build(){
    Stack({alignContent:Alignment.BottomEnd}){
      Column(){
        Text("联系人列表").width("100%").height(60).backgroundColor("#800f")
          .fontSize(25).fontColor(Color.White).fontWeight(FontWeight.Bold)
          .textAlign(TextAlign.Center)
        //列表设置宽度100%,高度根据内容自适应
        List({space:10,scroller:this.listScroller}){
          ForEach(this.groups,item=>{
            ListItemGroup({header:this.itemHead(item.title)}){
              ForEach(item.contacts,(contact,index)=>{
                ListItem(){
                  Row(){
                    Badge({
                      count: Math.round(Math.random()*10),
                      position: BadgePosition.RightTop,
                      style: { badgeSize: 16, badgeColor: '#FA2A2D' }
                    })
                    {Image(contact.icon).width(40).height(40)}.margin({left:10})
                    Text(contact.name).fontSize(20).margin({left:20}).layoutWeight(1)
                    Image(contact.icon1).width(40).height(40).margin(10).backgroundColor("#6aaa").borderRadius(20)
                  }.width("100%")
                }
                .swipeAction({ end: this.itemEnd(index) }) // 设置侧滑属性

              })
            }
          })
        }.width("100%")
        .sticky(StickyStyle.Header)// 设置吸顶,实现粘性标题效果


      }.width("100%")

      //创建按钮,回到顶部
      Button(){
          Image($r("app.media.top")).width(40).height(40)
      }.width(70).height(70).zIndex(1)
      .margin({bottom:30,right:30}).backgroundColor("#6aaa")
      .onClick(()=>{
        // 点击按钮时,指定跳转位置,返回列表顶部
        this.listScroller.scrollToIndex(0)
      })


    }.width("100%").height("100%")

  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux——yum工具详解

yum是linux中自动解决软件包依赖关系的管理器 同时,yum也是一个rpm软件 这里使用yum install nginx安装nginx

Windows SMBGhost CVE-2020-0796 Elevate Privileges

SMBGhost CVE-2020-0796 Microsoft Windows 10 (1903/1909) - ‘SMBGhost’ SMB3.1.1 ‘SMB2_COMPRESSION_CAPABILITIES’ Local Privilege Escalation https://www.exploit-db.com/exploits/48267 Github https://github.com/danigargu/CVE-2020-0796 修改载荷[可选] 生成 c# …

用c++实现起泡排序、哈密顿回路问题、TSP问题

5.3.2 起泡排序 【问题】 起泡排序(bubble sort)的基本思想是:两两比较相邻记录,如果反序则交换,直至没有反序的记录,如图5.8所示。【想法】下表给出了一个起泡排序的例子(方括号括起来的为无序区)&#x…

深入理解JavaScript:对象什么时候创建

🌟 我们在chrome浏览器中debug程序。为了好debug我们会写一些在日常开发中基本不会采用的代码书写方式。 JavaScript中创建对象有3中方式: 1、对象字面量; 2、new; 3、Object.create(对象); 1、使用new创建对象 fun…

MicroSIP电话呼叫软件使用及配置方法

MicroSIP是一款开源的SIP协议电话软件,它可以帮助你在计算机上进行语音和视频通话。下面是关于如何使用和配置MicroSIP的一些基本步骤: 安装MicroSIP 从MicroSIP官方网站下载适合你操作系统的安装包23。 解压下载的文件,并运行安装程序。 …

GRPC学习笔记

GRPC学习笔记 1 GRPC简介 1.1 定义 gRPC(Google Remote Procedure Call,Google远程过程调用)协议是谷歌发布的基于HTTP2协议承载的高性能、通用的RPC开源软件框架,提供了支持多种编程语言的、对网络设备进行配置和管理的方法。…

更新至2022年上市公司数字化转型数据合集(四份数据合集)

更新至2022年上市公司数字化转型数据合集(四份数据合集) 一、2000-2022年上市公司数字化转型数据(年报词频、文本统计) 二、2007-2022年上市公司数字化转型数据(年报和管理层讨论)(含原始数据…

Java中的运算符

运算符是用于数学函数、一些特殊的赋值语句和逻辑比较方面的特殊符号。 赋值运算符(“”) 赋值运算符是一个二元运算符(即对两个操作数进行处理),功能是将右侧的操作数赋值给左侧的操作数。 int a 100; 该表达式就…

prometheus配置监控Java应用服务

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

从底层分析并详解SpringAOP底层实现

首先分析AOP的实现 首先切面(Advisor)由通知(Advice)和切点(Pointcut)组成 包括前置通知后置通知等等最终都会被转化为实现 MethodInterceptor 接口的环绕通知 先看一段代码了解一下是aop是怎么运作的 首先定义了两个类实现了MethodInterceptor接口&…

XiaodiSec day017 Learn Note 小迪安全学习笔记

XiaodiSec day017 Learn Note 小迪安全学习笔记 记录得比较凌乱,不尽详细 day 17 主要内容: php 框架 thinkPHPyiilaravel 使用 fofa 搜索 thinkphp 市面上 thinkphp5 版本较多 url 结构 域名/.php(文件名)/index(目录)/index(函数名)模块名-控…

oracle 12c+ max_string_size参数

一个客户的数据库版本是19.3,在做数据库复制的时候,目标端报错了,查看了一下问题发现表的字段长度有不对,在12c以前我们都知道varchar的长度最大是4000,但是客户这里居然有32767: 把客户的建表语句弄出来,放到我的一个19c的测试环境进行测试: 发现报错了: 这里报错很明显了,是M…

不可思议!我的AI有道英语字典助手竟然与百度千帆AI应用创意挑战赛K12教育主题赛榜首作品差之毫厘

目录 一、前言二、效果对比三、优化《AI英语词典》提示词四、其他获奖作品链接 一、前言 今天看百度千帆AI原生应用创意挑战赛——K12教育主题赛,发现第一名的《我爱记单词》和我早两天发布的一篇《AI英语词典》的想法不谋而合。当时我们应该都是互相不知道对方的&a…

Day1--什么是网络安全?网络安全常用术语

目录 1. 什么是网络安全? 信息系统(Information System) 信息系统安全三要素(CIA) 网络空间安全管理流程 网络安全管理 2. 网络安全的常用术语 3. 网络安全形势 4. 中国网络安全产业现状 1. 什么是网络安全&am…

使用IOPaint实现图片擦除路人

IOPaint 是一个免费的开源的 inpainting/outpainting 工具,由最先进的 AI 模型提供支持。 IOPaint 中使用各种模型来修改图像: 擦除:删除任何不需要的物体、缺陷、水印、人物。修复:对图像的特定部分进行修改、添加新对象或替换…

第二期书生浦语大模型训练营第四次笔记

大模型微调技术 大模型微调是一种通过在预训练模型的基础上,有针对性地微调部分参数以适应特定任务需求的方法。 微调预训练模型的方法 微调所有层:将预训练模型的所有层都参与微调,以适应新的任务。 微调顶层:只微调预训练模型…

ACL的知识点和实验

1.ACL的组成 ACL由若干条permit或deny语句组成。每条语句就是该ACL的一条规则,每条语句中的permit或deny就是与这条规则相对应的处理动作。 2.规则编号 (1)一个ACL中的每一条规则都有一个相应的编号。 (2)步长是系…

本地CPU搭建知识库大模型来体验学习Prompt Engineering/RAG/Agent/Text2sql

目录 1.环境 2.效果 3.概念解析 4.架构图 5. AI畅想 6.涉及到的技术方案 7. db-gpt的提示词 1.环境 基于一台16c 32G的纯CPU的机器来搭建 纯docker 打造 2.效果 3.概念解析 Prompt Engineering : 提示词工程 RAG: 检索增强生成; …

PDE求格林函数

求Green函数 通俗地解释拉普拉斯方程的基本解的意义 拉普拉斯方程的基本解是一个非常有用的数学概念,它帮助我们理解在某一个点施加一个非常小的影响(比如一个微小的推动、热源或电荷)时,这种影响是如何在整个空间中扩散和影响其…

业内PMP考试哪家机构通过率高?

选择培训机构时,通过率并不是唯一的标准。PMP培训机构避坑指南,如何选择可靠的机构?哪些是虚假误导?哪些是真正的优质培训机构? 20家业内PMP机构测评 干扰项总结(一)【各种虚假排行榜】 这个行业首先不存在官方的机构…