BasicDataSource.ets 1.71 KB
/**
 * IDataSource处理数据侦听器的基本实现
 */
export abstract class BasicDataSource<T> implements IDataSource {
  private listeners: DataChangeListener[] = [];

  constructor() {
  }

  // 获取数据总个数
  public abstract totalCount(): number;

  // 获取索引对应的Item数据
  public abstract getData(index: number): T | undefined;

  // 注册改变数据的控制器
  public registerDataChangeListener(listener: DataChangeListener): void {
    if (this.listeners.indexOf(listener) < 0) {
      console.info('add DataChangeListener');
      this.listeners.push(listener);
    }
  }

  // 注销改变数据的控制器
  public unregisterDataChangeListener(listener: DataChangeListener): void {
    const pos = this.listeners.indexOf(listener);
    if (pos >= 0) {
      console.info('remove DataChangeListener');
      this.listeners.splice(pos, 1);
    }
  }

  // 通知控制器数据重新加载数据
  public notifyDataReload(): void {
    this.listeners.forEach(listener => {
      listener.onDataReloaded();
    })
  }

  // 通知控制器数据增加
  public notifyDataAdd(index: number): void {
    this.listeners.forEach(listener => {
      listener.onDataAdd(index);
    })
  }

  // 通知控制器数据位置变化
  public notifyDataMove(from: number, to: number): void {
    this.listeners.forEach(listener => {
      listener.onDataMove(from, to);
    })
  }

  // 通知控制器数据删除
  public notifyDataDelete(index: number): void {
    this.listeners.forEach(listener => {
      listener.onDataDelete(index);
    })
  }

  // 通知控制器数据变化
  public notifyDataChange(index: number): void {
    this.listeners.forEach(listener => {
      listener.onDataChange(index);
    })
  }
}