HarmonyOS:使用List實現分組列表(包含粘性標題)

一、支持分組列表

在列表中支持數據的分組展示,可以使列表顯示結構清晰,查找方便,從而提高使用效率。分組列表在實際應用中十分常見,如下圖所示聯系人列表。

聯系人分組列表

在這里插入圖片描述

在List組件中使用ListItemGroup對項目進行分組,可以構建二維列表。

在List組件中可以直接使用一個或者多個ListItemGroup組件,ListItemGroup的寬度默認充滿List組件。在初始化ListItemGroup時,可通過header參數設置列表分組的頭部組件。

@Entry
@Component
struct ContactsList {@Builder itemHead(text: string) {// 列表分組的頭部組件,對應聯系人分組A、B等位置的組件Text(text).fontSize(20).backgroundColor('#fff1f3f5').width('100%').padding(5)}build() {List() {ListItemGroup({ header: this.itemHead('A') }) {// 循環渲染分組A的ListItem}ListItemGroup({ header: this.itemHead('B') }) {// 循環渲染分組B的ListItem}}}
}

如果多個ListItemGroup結構類似,可以將多個分組的數據組成數組,然后使用ForEach對多個分組進行循環渲染。例如在聯系人列表中,將每個分組的聯系人數據contacts和對應分組的標題title數據進行組合,定義為數組contactsGroups。然后在ForEach中對contactsGroups進行循環渲染,即可實現多個分組的聯系人列表。可參考添加粘性標題示例代碼。

二、添加粘性標題

粘性標題是一種常見的標題模式,常用于定位字母列表的頭部元素。如下圖所示,在聯系人列表中滾動A部分時,B部分開始的頭部元素始終處于A的下方。而在開始滾動B部分時,B的頭部會固定在屏幕頂部,直到所有B的項均完成滾動后,才被后面的頭部替代。

粘性標題不僅有助于闡明列表中數據的表示形式和用途,還可以幫助用戶在大量信息中進行數據定位,從而避免用戶在標題所在的表的頂部與感興趣區域之間反復滾動。

粘性標題–聯系人分組列表

在這里插入圖片描述

List組件的sticky屬性配合ListItemGroup組件使用,用于設置ListItemGroup中的頭部組件是否呈現吸頂效果或者尾部組件是否呈現吸底效果。

通過給List組件設置sticky屬性為StickyStyle.Header,即可實現列表的粘性標題效果。如果需要支持吸底效果,可以通過footer參數初始化ListItemGroup的底部組件,并將sticky屬性設置為StickyStyle.Footer。

三、完整示例代碼

TestContactsList.ets

import { util } from '@kit.ArkTS'class Contact {contactkey: string = util.generateRandomUUID(true);name: string;avatar: Resource;constructor(name: string, avatar: Resource) {this.name = name;this.avatar = avatar;}
}class ContactsGroup {title: string = '';key: string = '';contacts: Array<object> | null = null;
}let contactsGroups: object[] = [{title: 'A',key: util.generateRandomUUID(true),contacts: [new Contact('Andy', $r('app.media.circle')),new Contact('安沃', $r('app.media.circle')),new Contact('昂科1', $r('app.media.circle')),new Contact('昂科2', $r('app.media.circle')),new Contact('昂科3', $r('app.media.circle')),]} as ContactsGroup,{title: 'B',key: util.generateRandomUUID(true),contacts: [new Contact('Ben', $r('app.media.circle')),new Contact('蹦高', $r('app.media.circle')),new Contact('巴掌1', $r('app.media.circle')),new Contact('巴掌2', $r('app.media.circle')),]} as ContactsGroup,{title: 'C',key: util.generateRandomUUID(true),contacts: [new Contact('ChenL', $r('app.media.circle')),new Contact('成才', $r('app.media.circle')),new Contact('程程1', $r('app.media.circle')),new Contact('程程2', $r('app.media.circle')),new Contact('程程3', $r('app.media.circle')),new Contact('程程4', $r('app.media.circle')),]} as ContactsGroup,{title: 'D',key: util.generateRandomUUID(true),contacts: [new Contact('DIba', $r('app.media.circle')),new Contact('迪迪1', $r('app.media.circle')),new Contact('迪迪2', $r('app.media.circle')),new Contact('迪迪3', $r('app.media.circle')),]} as ContactsGroup
]@Component
struct ItemContact {@Prop item: Contactbuild() {Row({ space: 10 }) {Image(this.item.avatar).width('50vp').height('50vp')Text(this.item.name).fontSize(20).fontColor(Color.Black).ellipsisMode(EllipsisMode.END).maxLines(1)}.width('100%').margin({ top: 16, bottom: 10 }).padding({ left: 16 }).alignItems(VerticalAlign.Center).justifyContent(FlexAlign.Start)}
}@Entry
@Component
struct TestContactsList {@State message: string = '分組列表';// 定義分組聯系人數據集合contactsGroups數組@BuilderitemHead(text: string) {// 列表分組的頭部組件,對應聯系人分組A、B等位置的組件Text(text).fontSize(20).backgroundColor('#fff1f3f5').width('100%').padding(5)}build() {Column({ space: 10 }) {Text(this.message).id('TestContactsListHelloWorld').fontSize(20).fontWeight(FontWeight.Bold)List() {ForEach(contactsGroups, (itemGroup: ContactsGroup) => {ListItemGroup({ header: this.itemHead(itemGroup.title) }) {if (itemGroup.contacts) {ForEach(itemGroup.contacts, (contact: Contact) => {ListItem() {ItemContact({ item: contact })}}, (item: Contact) => JSON.stringify(item))}}}, (itemGroup: ContactsGroup) => JSON.stringify(itemGroup))}.sticky(StickyStyle.Header).scrollBar(BarState.Auto)}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70038.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70038.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70038.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

django上傳文件

1、settings.py配置 # 靜態文件配置 STATIC_URL /static/ STATICFILES_DIRS [BASE_DIR /static, ]上傳文件 # 定義一個視圖函數&#xff0c;該函數接收一個 request 參數 from django.shortcuts import render # 必備引入 import json from django.views.decorators.http i…

【前端知識】瀏覽器兼容方案polyfill

瀏覽器兼容方案polyfill 什么是 Polyfill&#xff1f;Polyfill 的作用Polyfill 的工作原理1. **特性檢測**2. **加載 Polyfill**3. **模擬實現** Polyfill 的常見場景Polyfill 的使用方式Polyfill 的優缺點優點缺點 常見的 Polyfill 庫總結 什么是 Polyfill&#xff1f; Polyf…

C#學習之DateTime 類

目錄 一、DateTime 類的常用方法和屬性的匯總表格 二、常用方法程序示例 1. 獲取當前本地時間 2. 獲取當前 UTC 時間 3. 格式化日期和時間 4. 獲取特定部分的時間 5. 獲取時間戳 6. 獲取時區信息 三、總結 一、DateTime 類的常用方法和屬性的匯總表格 在 C# 中&#x…

dedecms 開放重定向漏洞(附腳本)(CVE-2024-57241)

免責申明: 本文所描述的漏洞及其復現步驟僅供網絡安全研究與教育目的使用。任何人不得將本文提供的信息用于非法目的或未經授權的系統測試。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權,請及時與我們聯系,我們將盡快處理并刪除相關內容。 0x0…

如何選擇合適的超參數來訓練Bert和TextCNN模型?

選擇合適的超參數來訓練Bert和TextCNN模型是一個復雜但關鍵的過程&#xff0c;它會顯著影響模型的性能。以下是一些常見的超參數以及選擇它們的方法&#xff1a; 1. 與數據處理相關的超參數 最大序列長度&#xff08;max_length&#xff09; 含義&#xff1a;指輸入到Bert模…

AWS 前端自動化部署流程指南

本文詳細介紹從前端代碼開發到 AWS 自動化部署的完整流程。 一、流程概覽 1.1 部署流程圖 #mermaid-svg-nYg7k6L5IKVBjDtr {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-nYg7k6L5IKVBjDtr .error-icon{fill:#552…

Office word打開加載比較慢處理方法

1.添加safe參數 ,找到word啟動項,右擊word,選擇屬性 , 添加/safe , 應用并確定 2.取消加載項,點擊文件,點擊選項 ,點擊加載項,點擊轉到,取消所有勾選,確定。

大數據SQL調優專題——Spark執行原理

引入 在深入MapReduce中有提到&#xff0c;MapReduce雖然通過“分而治之”的思想&#xff0c;解決了海量數據的計算處理問題&#xff0c;但性能還是不太理想&#xff0c;這體現在兩個方面&#xff1a; 每個任務都有比較大的overhead&#xff0c;都需要預先把程序復制到各個 w…

MYSQL下載安裝及使用

MYSQL官網下載地址&#xff1a;https://downloads.mysql.com/archives/community/ 也可以直接在服務器執行指令下載&#xff0c;但是下載速度比較慢。還是自己下載好拷貝過來比較快。 wget https://dev.mysql.com/get/Downloads/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz 1…

CentOS 7.8 安裝MongoDB 7 副本集(Replica Set)

文章目錄 1 環境假設步驟1&#xff1a;在兩臺服務器上安裝MongoDB步驟2&#xff1a;配置副本集步驟3&#xff1a;初始化副本集步驟4&#xff1a;驗證副本集配置步驟5&#xff1a;設置安全性&#xff08;可選&#xff09;擴展配置示例&#xff1a;最佳實踐&#xff1a;仲裁節點步…

AJAX 與 ASP 的深入探討

AJAX 與 ASP 的深入探討 引言 隨著互聯網技術的飛速發展,Web應用程序的交互性和性能要求越來越高。AJAX(Asynchronous JavaScript and XML)和ASP(Active Server Pages)作為兩種重要的Web開發技術,在提高Web應用程序性能和用戶體驗方面發揮著重要作用。本文將深入探討AJ…

內網下,Ubuntu (24.10) 離線安裝docker最新版教程

一般在數據比較敏感的情況下&#xff0c;是無法使用網絡的&#xff0c;而對于Ubuntu系統來說&#xff0c;怎么離線安裝docker呢&#xff1f; 下面我給大家來講一下&#xff1a; 采用二進制安裝&#xff1a; 1.下載docker離線包 官網下載&#xff1a; Index of linux/static…

Copilot Next Edit Suggestions(預覽版)

作者&#xff1a;Brigit Murtaugh&#xff0c;Burke Holland 排版&#xff1a;Alan Wang 我們很高興向你介紹在本次 Visual Studio Code 發布中&#xff0c;關于 GitHub Copilot 的三個預覽功能&#xff1a; Next Edit Suggestions&#xff08;NES&#xff09;Copilot Edits 的…

高性能內存對象緩存Memcached詳細實驗操作

目錄 前提準備&#xff1a; cache1&#xff0c;2&#xff1a; 客戶端cache-api&#xff08;一定得是LAMP環境&#xff09; memcache實現主主復制以及高可用(基于以上完成) cache1,2: memcachekeepalived(基于以上完成) cache1,2: 前提準備&#xff1a; 1. 準備三臺cent…

全單模矩陣及其在分支定價算法中的應用

全單模矩陣及其在分支定價算法中的應用 目錄 全單模矩陣的定義與特性全單模矩陣的判定方法全單模矩陣在優化中的核心價值分支定價算法與矩陣單模性的關系非全單模問題的挑戰與系統解決方案總結與工程實踐建議 1. 全單模矩陣的定義與特性 關鍵定義 單模矩陣&#xff08;Unimo…

Spring AI發布!讓Java緊跟AI賽道!

1. 序言 在當今技術發展的背景下&#xff0c;人工智能&#xff08;AI&#xff09;已經成為各行各業中不可忽視的重要技術。無論是在互聯網公司&#xff0c;還是傳統行業&#xff0c;AI技術的應用都在大幅提升效率、降低成本、推動創新。從智能客服到個性化推薦&#xff0c;從語…

【kafka系列】Kafka如何保證消息不丟失?

目錄 1. 生產者端&#xff1a;確保消息成功發送到Broker 核心機制&#xff1a; 關鍵步驟&#xff1a; 2. Broker端&#xff1a;持久化與副本同步 核心機制&#xff1a; 關鍵源碼邏輯&#xff1a; 3. 消費者端&#xff1a;可靠消費與Offset提交 核心機制&#xff1a; 關…

利用二分法+布爾盲注、時間盲注進行sql注入

一、布爾盲注&#xff1a; import requestsdef binary_search_character(url, query, index, low32, high127):while low < high:mid (low high 1) // 2payload f"1 AND ASCII(SUBSTRING(({query}),{index},1)) > {mid} -- "res {"id": payloa…

UART(一)——UART基礎

一、定義 UART(Universal Asynchronous Receiver/Transmitter)是一種廣泛使用的串行通信協議,用于在設備間通過異步方式傳輸數據。它無需共享時鐘信號,而是依賴雙方預先約定的參數(如波特率)完成通信。 功能和特點 基本的 UART 系統只需三個信號即可提供穩健的中速全雙工…

【PHP】php+mysql 活動信息管理系統(源碼+論文+數據庫+數據庫文件)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;專__注&#x1f448;&#xff1a;專注主流機器人、人工智能等相關領域的開發、測試技術。 【PHP】php 活動信息管理系統&#xff08;源碼論文…