HarmonyOS Next应用开发实战——懒加载数据源实现

110 阅读2分钟

HarmonyOS Next应用开发实战——懒加载数据源实现

文章概要

本文聚焦于HarmonyOS Next应用开发中懒加载数据源的实现。详细介绍了如何创建一个通用的数据源类,以实现对数据的管理和更新,并通过事件通知机制让相关组件及时响应数据变化,提升应用性能和用户体验。

核心功能介绍

1. 基础数据源类

BasicDataSource 类实现了基本的数据源接口,它包含一个监听器数组,用于管理 LazyForEach 组件的监听事件。

class BasicDataSource <T> implements IDataSource {
  private listeners: DataChangeListener[] = [];

  public totalCount(): number {
    return 0;
  }

  public getData(index: number): T | undefined {
    return undefined;
  }

  // 注册数据变化监听器
  registerDataChangeListener(listener: DataChangeListener): void {
    if (this.listeners.indexOf(listener) < 0) {
      this.listeners.push(listener);
    }
  }

  // 取消注册数据变化监听器
  unregisterDataChangeListener(listener: DataChangeListener): void {
    const pos = this.listeners.indexOf(listener);
    if (pos >= 0) {
      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);
    })
  }
}
2. 懒加载数据源类

LazyDataSource 类继承自 BasicDataSource,并扩展了数据管理的功能,如添加、删除、清空数据等。

@Observed
export class LazyDataSource<T> extends BasicDataSource<T> {
  dataArray: T[] = [];

  // 获取数据总数
  public totalCount(): number {
    return this.dataArray.length;
  }

  // 获取指定索引的数据
  public getData(index: number): T {
    return this.dataArray[index];
  }

  // 在指定索引添加数据
  public addData(index: number, data: T): void {
    this.dataArray.splice(index, 0, data);
    this.notifyDataAdd(index);
  }

  // 在数组末尾添加数据
  public pushData(data: T): void {
    this.dataArray.push(data);
    this.notifyDataAdd(this.dataArray.length - 1);
  }

  // 清空数据并添加新数组数据
  public pushArrayData(newData: T[]): void {
    this.clear();
    newData.forEach(element => {
      this.pushData(element)
    });
    this.notifyDataReload();
  }

  // 在数组末尾添加数组数据
  public appendArrayData(addData:T): void {
    this.dataArray.push(addData);
    this.notifyDataReload()
  }

  // 删除指定索引的数据
  public deleteData(index: number): void {
    this.dataArray.splice(index, 1);
    this.notifyDataDelete(index);
  }

  // 获取数据列表
  public getDataList(): T[] {
    return this.dataArray;
  }

  // 清空数据
  public clear(): void {
    this.dataArray.splice(0, this.dataArray?.length)
  }

  // 判断数据是否为空
  public isEmpty(): boolean {
    return this.dataArray.length === 0;
  }
}

通过以上实现,开发者可以在HarmonyOS Next应用中方便地管理和更新数据,并确保 LazyForEach 组件能够及时响应数据变化,提高应用的性能和响应速度。