鸿蒙6.0开发常见问题【如何实现二维数组的懒加载?】
·
重新定义数据源的数据类型,使用HashMap实现二维数组的懒加载数据源,并通过ListGroup对数据进行分组。示例代码如下:
import { HashMap } from '@kit.ArkTS';
class BasicDataSource implements IDataSource {
private listeners: DataChangeListener[] = [];
private originDataArray: Array<TimeTable> | Array<string> = [];
public totalCount(): number {
return 0;
}
public getData(index: number): TimeTable | string {
return this.originDataArray[index];
}
registerDataChangeListener(listener: DataChangeListener): void {
if (this.listeners.indexOf(listener) < 0) {
console.info('add listener');
this.listeners.push(listener);
}
}
unregisterDataChangeListener(listener: DataChangeListener): void {
const pos = this.listeners.indexOf(listener);
if (pos >= 0) {
console.info('remove listener');
this.listeners.splice(pos, 1);
}
}
notifyDataReload(): void {
this.listeners.forEach(listener => {
listener.onDataReloaded();
})
}
notifyDataAdd(index: number): void {
this.listeners.forEach(listener => {
listener.onDataAdd(index);
})
}
notifyDataChange(index: number): void {
this.listeners.forEach(listener => {
listener.onDataChange(index);
})
}
notifyDataDelete(index: number): void {
this.listeners.forEach(listener => {
listener.onDataDelete(index);
})
}
notifyDataMove(from: number, to: number): void {
this.listeners.forEach(listener => {
listener.onDataMove(from, to);
})
}
}
class MyDataSource extends BasicDataSource {
private dataArray: TimeTable[] | Array<string> = [];
constructor(data: Array<TimeTable> | Array<string>) {
super();
this.dataArray = data;
}
public totalCount(): number {
return this.dataArray.length;
}
public getData(index: number): TimeTable | string {
return this.dataArray[index];
}
public addDataTimeTable(index: number, data: TimeTable): void {
this.dataArray.splice(index, 0, data);
this.notifyDataAdd(index);
}
public addDataString(index: number, data: string): void {
this.dataArray.splice(index, 0, data);
this.notifyDataAdd(index);
}
public pushDataTimeTable(data: TimeTable): void {
(this.dataArray as Array<TimeTable>).push(data);
this.notifyDataAdd(this.dataArray.length - 1);
}
public pushDataString(data: string): void {
(this.dataArray as Array<string>).push(data);
this.notifyDataAdd(this.dataArray.length - 1);
}
}
interface TimeTable {
title: string;
projects: string[];
}
@Component
export struct TwoNestingArrayLazy {
@State timeTable: TimeTable[] = [
{
title: 'Monday',
projects: ['language', 'mathematics', 'English']
},
{
title: 'Tuesday',
projects: ['physics', 'chemistry', 'biology']
},
{
title: 'Wednesday',
projects: ['history', 'geography', 'politics']
},
{
title: 'Thursday',
projects: ['the fine arts', 'music', 'sport']
}
];
private data1: MyDataSource = new MyDataSource(this.timeTable);
private hashMap: HashMap<string, MyDataSource> = new HashMap();
aboutToAppear(): void {
for (let index = 0; index < this.timeTable.length; index++) {
this.hashMap.set(this.timeTable[index].title, new MyDataSource(this.timeTable[index].projects));
}
}
@Builder
itemHead(text: string) {
Text(text)
.fontSize(20)
.backgroundColor(0xAABBCC)
.width('100%')
.padding(10)
}
@Builder
itemFoot(num: number) {
Text('common' + num + 'period')
.fontSize(16)
.backgroundColor(0xAABBCC)
.width("100%")
.padding(5)
}
build() {
List({ space: 3 }) {
LazyForEach(this.data1, (item: TimeTable) => {
ListItemGroup({ header: this.itemHead(item.title), footer: this.itemFoot(item.projects.length) }) {
LazyForEach(this.hashMap.get(item.title), (project: string) => {
ListItem() {
Text(project)
.width('100%')
.height(100)
.fontSize(20)
.textAlign(TextAlign.Center)
.backgroundColor(0xFFFFFF)
}
}, (item: string) => item)
}
.divider({ strokeWidth: 1, color: Color.Blue }) // The boundary line between each row
}, (item: string) => item)
}
.width('100%')
.height('100%')
}
}
更多推荐


所有评论(0)