HarmonyOS LazyForEach无法检测数据源的变化进行重新渲染
假设源数据源为:ABABAABB
现在需要过滤单独为A或B进行展示,需要更换数据源
已经更换了数据源,并调用了notifyDataReload方法,但是页面上LazyForEach中数据依旧不更新。
代码处理流程
1.实现IDataSource接口
export class CommonDataSource<T> implements IDataSource {
private dataArray: T[] = [];
private listeners: DataChangeListener[] = [];
constructor(element: T[]) {
this.dataArray = element;
}
public getData(index: number) {
return this.dataArray[index]
}
public totalCount(): number {
return this.dataArray.length;
}
public addData(index: number, data: T[]): void {
this.dataArray = this.dataArray.concat(data);
this.notifyDataAdd(index);
}
public pushData(data: T): void {
this.dataArray.push(data);
this.notifyDataAdd(this.dataArray.length - 1);
}
unregisterDataChangeListener(listener: DataChangeListener): void {
const pos = this.listeners.indexOf(listener);
if (pos >= 0) {
this.listeners.splice(pos, 1);
}
}
registerDataChangeListener(listener: DataChangeListener): void {
if (this.listeners.indexOf(listener) < 0) {
this.listeners.push(listener);
}
}
notifyDataReload(): void {
this.listeners.forEach((listener: DataChangeListener) => {
listener.onDataReloaded();
})
}
notifyDataAdd(index: number): void {
this.listeners.forEach((listener: DataChangeListener) => {
listener.onDataAdd(index);
})
}
notifyDataChange(index: number): void {
this.listeners.forEach((listener: DataChangeListener) => {
listener.onDataChange(index);
})
}
notifyDataDelete(index: number): void {
this.listeners.forEach((listener: DataChangeListener) => {
listener.onDataDelete(index);
})
}
notifyDataMove(from: number, to: number): void {
this.listeners.forEach((listener: DataChangeListener) => {
listener.onDataMove(from, to);
})
}
modifyAllData(element: T[]): void{
this.dataArray = element
this.notifyDataReload()
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
2.定义数据源数据
@State messages: Array<Message> = []
@State filterMessages: Array<Message> = []
@Watch('onFilterIndexChange')@State filterIndex: number = 0; // 用来监听选择的条件,比如0表示全选,1表示筛选A 2表示筛选B
- 1.
- 2.
- 3.
3.源数据源列表展示
List({ space: 10 }) {
LazyForEach(this.data, (item: Message) => {
ListItem() {
this.MessageItem(item)
}
})
}
.scrollBar(BarState.Off)
.cachedCount(4)
@Builder
MessageItem(item: Message) {}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
4.更换数据源
onFilterIndexChange(){
// AlertDialog.show({message: `${this.filterIndex}`})
if (this.filterIndex === 0) {
this.data?.modifyAllData(this.messages)
}else if(this.filterIndex === 1){
this.filterMessages = this.messages.filter((message : Message) => message.type === MessageType.HumanoidDetection)
this.data?.modifyAllData(this.filterMessages)
}else {
this.filterMessages = this.messages.filter((message : Message) => message.type === MessageType.MotionDetection)
this.data?.modifyAllData(this.filterMessages)
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
HarmonyOS
赞
收藏 0
回答 1
相关问题
lazyforeach替换数据源解决方案
1715浏览 • 1回复 待解决
异步回调更新数据源,无法触发列表渲染
3843浏览 • 2回复 待解决
Foreach循环渲染,数据源改变时的重复渲染
1965浏览 • 1回复 待解决
HarmonyOS LazyForEach修改数据源不刷新问题
1708浏览 • 1回复 待解决
HarmonyOS Swiper使用LazyForEach,在数据源更新后,页面闪烁
1163浏览 • 1回复 待解决
HarmonyOS 使用LazyForEach,数据源传不进来,UI不更新
992浏览 • 1回复 待解决
关于使用foreach&lazyforeach更改数据源界面不刷新的问题
2048浏览 • 2回复 待解决
如何解决使用foreach&lazyforeach循环渲染时,会出现更改数据源时,界面不刷新的问题
1870浏览 • 1回复 待解决
HarmonyOS 父组件的数据源监听到没变化,但是UI刷新了
562浏览 • 1回复 待解决
HarmonyOS 数组修改item对象的某个值,notifyDataReload无法重新渲染LazyForEach
798浏览 • 1回复 待解决
使用foreach&lazyforeach循环渲染时,会出现更改数据源时,界面不刷新的情况。如何解决
3376浏览 • 1回复 待解决
HarmonyOS picker选择器的数据源问题
835浏览 • 1回复 待解决
HarmonyOS TextPickerDialog数据源更新,UI不更新
908浏览 • 1回复 待解决
HarmonyOS ForEach数据源属性修改,页面不刷新
813浏览 • 1回复 待解决
HarmonyOS IDataSource数据源刷新后,列表为不刷新
1302浏览 • 1回复 待解决
HarmonyOS IDataSource支持数据源整体一次替换
1627浏览 • 1回复 待解决
HarmonyOS 解析Json数据添加到数据源不刷新UI
1512浏览 • 2回复 待解决
HarmonyOS TextPicker多列选择器数据源的构造问题
605浏览 • 1回复 待解决
HarmonyOS Photo Picker组件数据源赋值问题咨询
838浏览 • 1回复 待解决
MVVM设计模式中的ViewModel的顶层数据源是如何与低层数据进行同步的?
1120浏览 • 1回复 待解决
HarmonyOS ForEach、LazyForEach重新渲染item的时候,item里的图片会闪动
757浏览 • 1回复 待解决
HarmonyOS Tabs展示完毕后,修改数据源后,Tabs内容无法刷新,请问如何处理
607浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何管理HarmonyOS NEXT中轮播图的数据源?
784浏览 • 1回复 待解决
HarmonyOS list中传入一个sendable属性的数组,数据源变化时,里面的item一直在重新创建,有啥办法避免吗?
821浏览 • 1回复 待解决
HarmonyOS 自定义组件,数据更新时,界面无法重新渲染
788浏览 • 1回复 待解决
LazyforEach生成键值的方式与ForEach不同。
LazyforEach生成键值的方式根据文档的内容,可知如果修改了数据源,需要手动修改键值生成方式