五笔打字通主页
以下代码处理的数据类型为泛型:
// BasicDataSource实现了IDataSource接口,用于管理listener监听,以及通知LazyForEach数据更新 // 以下2个类(BasicDataSource,MyDataSource),用于懒加载的data数据处理 class BasicDataSource<T> implements IDataSource { private listeners: DataChangeListener[] = []; private originDataArray: T[] = []; public totalCount(): number { return 0; } public getData(index: number): T { return this.originDataArray[index]; } // 该方法为框架侧调用,为LazyForEach组件向其数据源处添加listener监听 registerDataChangeListener(listener: DataChangeListener): void { if (this.listeners.indexOf(listener) < 0) { console.info('add listener'); this.listeners.push(listener); } } // 该方法为框架侧调用,为对应的LazyForEach组件在数据源处去除listener监听 unregisterDataChangeListener(listener: DataChangeListener): void { const pos = this.listeners.indexOf(listener); if (pos >= 0) { console.info('remove listener'); this.listeners.splice(pos, 1); } } // 通知LazyForEach组件需要重载所有子组件 notifyDataReload(): void { this.listeners.forEach(listener => { listener.onDataReloaded(); }) } // 通知LazyForEach组件需要在index对应索引处添加子组件 notifyDataAdd(index: number): void { this.listeners.forEach(listener => { listener.onDataAdd(index); // 写法2:listener.onDatasetChange([{type: DataOperationType.ADD, index: index}]); }) } // 通知LazyForEach组件在index对应索引处数据有变化,需要重建该子组件 notifyDataChange(index: number): void { this.listeners.forEach(listener => { listener.onDataChange(index); // 写法2:listener.onDatasetChange([{type: DataOperationType.CHANGE, index: index}]); }) } // 通知LazyForEach组件需要在index对应索引处删除该子组件 notifyDataDelete(index: number): void { this.listeners.forEach(listener => { listener.onDataDelete(index); // 写法2:listener.onDatasetChange([{type: DataOperationType.DELETE, index: index}]); }) } // 通知LazyForEach组件将from索引和to索引处的子组件进行交换 notifyDataMove(from: number, to: number): void { this.listeners.forEach(listener => { listener.onDataMove(from, to); // 写法2:listener.onDatasetChange( // [{type: DataOperationType.EXCHANGE, index: {start: from, end: to}}]); }) } notifyDatasetChange(operations: DataOperation[]): void { this.listeners.forEach(listener => { listener.onDatasetChange(operations); }) } } class MyDataSource<T> extends BasicDataSource<T> { private dataArray: T[] = []; public totalCount(): number { return this.dataArray.length; } public getData(index: number): T { return this.dataArray[index]; } public pushData(data: T): void { this.dataArray.push(data); this.notifyDataAdd(this.dataArray.length - 1); } public pushAllData(data: T[]): void { for (let index = 0; index < data.length; index++) { this.pushData(data[index]) } } } @Entry @Component struct Page8 { //要懒加载的数据 data 必须要经过 MyDataSource 处理一下才行。 private data: MyDataSource<string> = new MyDataSource<string>(); aboutToAppear() { // //加载数据有3种方法,方法1: const array: string[] = [] for (let i = 0; i <= 10000; i++) { array.push(`Hello ${i}`) } this.data.pushAllData(array) // //方法2 - 源码来自 wb98.com // const array = // ['中国', '美国', '英国', '法国', '俄罗斯', '德国', '新西兰', '哥伦比亚', '新加坡', '日本', '越南', '加拿大', // '乌克兰', // '南非', '埃及', '泰国', '澳大利亚', '智利', '巴西', '冰岛'] // this.data.pushAllData(array) // const array=colors1 //方法3---导入别的页面的数据 // this.data.pushAllData(array) } build() { Column() { //---------------- List({ space: 3 }) { LazyForEach(this.data, (item: string, index: number) => { ListItem() { Row() { Text(item) .fontSize(50) .onClick(() => { AlertDialog.show({ message: 'Index:' + index.toString() + ' item:' + item }) }) } } }, (item: string) => item) }.cachedCount(5) //缓存 源码来自 wb86.com //---------------- } } }
来源:济亨网
本文链接:https://www.wb98.com/post/390.html