点击"从头部填加一个"按钮那里有注释,跟期望不太一样
export class LazyForEachAdapter<T> implements IDataSource {
private listeners: DataChangeListener[] = [];
originDataArray: T[] = [];
public totalCount(): number {
return this.originDataArray.length;
}
public getData(index: number): T {
return this.originDataArray[index];
}
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) {
// 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);
})
}
//DataAddOperation | DataDeleteOperation | DataChangeOperation | DataMoveOperation | DataExchangeOperation | DataReloadOperation
/**
* 使用这个api的时候,这个类只能使用onDatasetChange这一种形式,也就是类中只能包含onDatasetChange刷新方式要么就不包含要不就报错
* @param dataOperations
*/
notifyWithDataOperation(dataOperations: DataOperation[]) {
this.listeners.forEach((listener) => {
listener.onDatasetChange(dataOperations)
})
}
notifyDataReloadWithOperation() {
this.listeners.forEach((listener) => {
listener.onDatasetChange([{} as DataReloadOperation])
})
}
notifyDataRemoveWithOperation(index: number, count?: number) {
this.listeners.forEach((listener) => {
listener.onDatasetChange([{
index: index,
//默认是一个
count: count
} as DataDeleteOperation])
})
}
notifyDataAddWithOperation(index: number, count?: number, key?: string | string[] | undefined) {
this.listeners.forEach((listener) => {
listener.onDatasetChange([{
index: index,
//默认是一个
count: count,
//Key of added data
key: key
} as DataAddOperation])
})
}
notifyDataChangeWithOperation(index: number, key?: string) {
this.listeners.forEach((listener) => {
listener.onDatasetChange([{
index: index,
key: key
} as DataChangeOperation])
})
}
notifyDataMoveWithOperation(from: number, to: number, key?: string) {
this.listeners.forEach((listener) => {
listener.onDatasetChange([{
index: {
from: from,
to: to
},
key: key
} as DataMoveOperation])
})
}
notifyDataExChangeWithOperation(index: ExchangeIndex, key?: ExchangeKey) {
this.listeners.forEach((listener) => {
listener.onDatasetChange([{
index: index,
key: key
} as DataExchangeOperation])
})
}
}
@Entry
@Component
struct swiperIndicatorPage {
private adapter: LazyForEachAdapter<string> = new LazyForEachAdapter()
aboutToAppear(): void {
this.adapter.originDataArray.push(...["测试1", "测试2"])
}
build() {
Column() {
Text("从头部填加一个")
.width("100%")
.height(44)
.onClick(() => {
this.adapter.originDataArray.unshift("头部添加的")
//方式1是有效的
//this.adapter.notifyDataAdd(0)
//方式2是直接添加在底部并且是:"测试2",跟预期的不一样
this.adapter.notifyDataAddWithOperation(0, 1,("头部添加的" + 0))
})
List() {
LazyForEach(this.adapter, (value: string, index) => {
ListItem(){
Text(value)
.width("100%")
.height(44)
}
}, (value: string, index: number) => {
return value + index
})
}
}
}
}
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
需要加上type: DataOperationType.ADD,具体使用可以参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides...