成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ArkUI(TS)聲明式開(kāi)發(fā):列表字母索引導(dǎo)航

系統(tǒng) OpenHarmony
前段時(shí)間SDK版本更新了,看了更新介紹,ArkUI(TS)主要是新增了文本輸入組件。更新版本后研究一下,發(fā)現(xiàn)有些組件也有所更新和優(yōu)化。所以就想寫(xiě)這個(gè)項(xiàng)目。

??想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??

??https://ost.51cto.com??

前言

前段時(shí)間SDK版本更新了,看了更新介紹,ArkUI(TS)主要是新增了文本輸入組件。更新版本后研究一下,發(fā)現(xiàn)有些組件也有所更新和優(yōu)化。所以就想寫(xiě)這個(gè)項(xiàng)目。

項(xiàng)目說(shuō)明

本項(xiàng)目界面搭建基于ArkUI中TS擴(kuò)展的聲明式開(kāi)發(fā)范式,關(guān)于語(yǔ)法和概念直接看官網(wǎng)官方文檔地址:??基于TS擴(kuò)展的聲明式開(kāi)發(fā)范式1、基于TS擴(kuò)展的聲明式開(kāi)發(fā)范式2??。

  • 工具版本:DevEco Studio 3.0 Beta2。
  • SDK版本:3.0.0.1(API Version 7 Beta2)。

主要知識(shí)點(diǎn)

??列表容器(List):??本次更新加入了Scroller,可以控制列表的跳轉(zhuǎn)位置。

??循環(huán)渲染( ForEach ):??本次更新修復(fù)了index不能使用的問(wèn)題。

??字母索引條(AlphabetIndexer)??。

效果演示

1、字母索引導(dǎo)航到列表對(duì)應(yīng)位置,2、列表滑動(dòng)時(shí)也同步定位到字母索引處。

實(shí)現(xiàn)思路

1、布局主要結(jié)構(gòu)。

// 堆疊容器,方向居右
Stack({ alignContent: Alignment.End }) {
// 列表布局
Column() {
List() {
......
}
}.width('100%')
.height('100%')

// 字母索引導(dǎo)航
AlphabetIndexer()
}

2、列表數(shù)據(jù)格式。

[
{ name: '周杰倫', headerWord: 'Z' },
{ name: '林俊杰', headerWord: 'L' },
{ name: '陳奕迅', headerWord: 'C' },
{ name: '薛之謙', headerWord: 'X' },
......
]

3、列表布局。

這塊需要注意的是,分組效果:相同字母只顯示一個(gè)就行。

// 列表數(shù)據(jù)
private listContacts: Array<Contacts> = getContactsList()
// 滾動(dòng)控制器
private scroller: Scroller = new Scroller()
List({ scroller: this.scroller }) {
ForEach(this.listContacts, (item: Contacts, index) => {
ListItem() {
Column() {
// 字母布局
if (index == 0) {
// 第一個(gè)肯定要顯示
this.HeaderWord(item)
} else {
// 當(dāng)前字母和前一個(gè)不一樣就顯示
if (item.headerWord != this.listContacts[index-1].headerWord) {
this.HeaderWord(item)
}
}
// 聯(lián)系人內(nèi)容布局
this.ContactsContentLayout(item)
}
}
}, (item, index) => index.toString())
}

4、字母索引導(dǎo)航。

(1)獲取列表中字母和索引的對(duì)應(yīng)的map集合,和列表字母布局顯示條件是相同的。

  let mapAlphabetsIndex: Map<string, number> = new Map()
for (var i = 0; i < list.length; i++) {
const element = list[i];
// 第一個(gè)肯定要添加到map中
if (i == 0) {
mapAlphabetsIndex.set(element.headerWord,i)
} else {
// 當(dāng)前字母和前一個(gè)不一樣,添加到map中
if (element.headerWord != list[i-1].headerWord) {
mapAlphabetsIndex.set(element.headerWord,i)
}
}
}

(2)根據(jù)字母索引組件選中回調(diào)事件,獲取字母對(duì)應(yīng)的索引,進(jìn)行跳轉(zhuǎn)就行。

private alphabets: string[] = ['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']
@State private selectedIndex: number = 0
// 字母索引導(dǎo)航
AlphabetIndexer({ arrayValue: this.alphabets, selected: this.selectedIndex })
.onSelected((index: number) => {// 選中事件回調(diào)
// 選中的字母
const alphabet = this.alphabets[index]
// 查詢字母在列表中的索引
const selectedIndex = this.mapAlphabetsIndex.get(alphabet);
// 跳轉(zhuǎn)到指定索引位置
this.scroller.scrollToIndex(selectedIndex)
})

5、列表滑動(dòng)選中字母。

List({ scroller: this.scroller }) {
......
}
.onScrollIndex((start, end) => {
// 監(jiān)聽(tīng)滑動(dòng)時(shí)頂部的索引,查詢對(duì)應(yīng)的數(shù)據(jù)
const element = this.listContacts[start]
// 更新選中的字母索引
this.selectedIndex = this.alphabets.indexOf(element.headerWord)
})

項(xiàng)目地址

項(xiàng)目加了個(gè)漢字轉(zhuǎn)拼音的工具類。

https://gitee.com/liangdidi/AlphabetIndexerDemo.git(需要登錄才能看到演示圖)

總結(jié)

此項(xiàng)目經(jīng)典的使用場(chǎng)景就是聯(lián)系人,實(shí)現(xiàn)過(guò)程需要注意:

  • 數(shù)據(jù)源使用拼音工具類獲取大寫(xiě)首字母,并進(jìn)行列表排序。
  • 字母布局的顯示條件,相同字母只顯示一個(gè)。
  • 首字母與其索引初始化時(shí)存入map中,AlphabetIndexer組件在onSelected回調(diào)中獲取字母對(duì)應(yīng)的索引,滑動(dòng)到指定的列表位置。
  • List組件在onScrollIndex回調(diào)中監(jiān)聽(tīng)滑動(dòng)到當(dāng)前頂部的索引,更新選中的字母索引。

每天進(jìn)步一點(diǎn)點(diǎn)、需要付出努力億點(diǎn)點(diǎn)。

??想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??

??https://ost.51cto.com??

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2022-08-08 19:46:26

ArkUI鴻蒙

2022-09-26 15:16:03

ArkUITS

2022-08-23 16:07:02

ArkUI鴻蒙

2022-09-02 15:17:04

ArkUI鴻蒙

2021-12-01 10:02:57

鴻蒙HarmonyOS應(yīng)用

2022-07-20 15:32:25

時(shí)鐘翻頁(yè)Text組件

2021-11-26 15:31:43

鴻蒙HarmonyOS應(yīng)用

2023-12-11 17:20:36

抽屜式導(dǎo)航ArkUI應(yīng)用開(kāi)發(fā)

2022-11-21 16:15:41

ArkUI鴻蒙

2010-07-07 11:15:13

SQL Server設(shè)

2022-08-24 16:08:22

ETS鴻蒙

2022-01-07 09:56:16

鴻蒙HarmonyOS應(yīng)用

2020-12-17 07:59:46

聲明式代碼命令式代碼代碼

2009-06-22 09:01:57

Spring聲明式事務(wù)

2022-06-21 08:12:17

K8sAPI對(duì)象Kubernetes

2021-12-20 10:07:39

鴻蒙HarmonyOS應(yīng)用

2022-09-08 15:18:51

Ability鴻蒙

2014-04-08 17:35:24

iOS 7彈簧式列表

2023-12-20 17:28:48

水波紋ArkUI動(dòng)畫(huà)開(kāi)發(fā)

2024-11-13 19:03:14

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 米奇7777狠狠狠狠视频 | 在线激情视频 | 久久精品国产99国产精品 | 中文av在线播放 | 午夜影院 | 国产黄色大片在线观看 | 亚洲视频免费 | 国产精品久久久久久一级毛片 | 精品一区二区三区av | 色综合一区二区三区 | 国产亚洲一区二区三区在线 | 久久亚洲综合 | 午夜看片 | 在线观看中文字幕视频 | 性高湖久久久久久久久 | 综合五月婷 | 综合自拍 | 国产精品国产三级国产aⅴ无密码 | 99久久久国产精品 | 日本一区二区三区视频在线 | 日韩一区二区三区在线 | 亚洲毛片网站 | 欧美日韩精品中文字幕 | 亚洲久久| 久久综合九色综合欧美狠狠 | 毛片在线免费播放 | 亚洲一级毛片 | 国内精品在线视频 | 日韩欧美中文 | 精品国产乱码久久久久久图片 | 91精品国产91久久久久久 | 成人免费xxxxx在线视频 | 国产精品99久久久久久大便 | 成人区精品一区二区婷婷 | 日韩在线免费播放 | 天天综合天天 | 国产 91 视频 | 欧美日韩在线观看一区 | 亚洲一区二区久久久 | 精品久久香蕉国产线看观看亚洲 | 婷婷丁香在线视频 |