HarmonyOS notifyDataAdd失效问题
请看如下代码,加载数据后,点击顶部增加元素,调用 this.dataSource.addFirstItem() 后,列表并没有加元素。请帮忙看下是系统api的bug还是使用的问题。
@Entry
@Component
struct ListExample {
private listScroller: Scroller = new Scroller();
@State num:number = 9
dataSource: WaterFlowDataSource = new WaterFlowDataSource()
aboutToAppear(): void {
setTimeout(()=>{
let dataArray: MessageData[] =[]
for (let i = 0; i < 20; i++) {
dataArray.push(new MessageData("1","ha"))
}
this.dataSource.addDataArray(dataArray)
//this.listScroller.scrollEdge(Edge.Bottom)
},2000)
}
build() {
Column() {
Button('顶部增加数据')
.onClick(() => {
console.info('dataCode' + this.num)
this.num++
this.dataSource.addFirstItem()
})
List({ space: 20, initialIndex: 9,scroller: this.listScroller }) {
LazyForEach(this.dataSource, (item: MessageData,index:number) => {
ListItem() {
Row(){
Image($r('app.media.app_icon')).width(20)
Text('哈哈 ' + item.text + " " + item.pic + " index="+index)
.width('100%').height(100).fontSize(16)
.textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
}
}
}, (item: string) => item)
}.onReachStart(()=>{
setTimeout(()=>{
this.dataSource.addData(0,new MessageData('top','顶部元素'))
},500)
})
.listDirection(Axis.Vertical) // 排列方向
.scrollBar(BarState.Off)
.friction(0.6)
.divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线
.edgeEffect(EdgeEffect.Spring) // 边缘效果设置为Spring
.onScrollIndex((firstIndex: number, lastIndex: number, centerIndex: number) => {
//this.listScroller.scrollToIndex(lastIndex)
})
.width('90%')
.layoutWeight(1)
}
.width('100%')
.height('100%')
.backgroundColor(0xDCDCDC)
.padding({ top: 5 })
}
}
export class WaterFlowDataSource implements IDataSource {
private dataArray: MessageData[] = []
private listeners: DataChangeListener[] = []
constructor() {
for (let i = 0; i < 20; i++) {
this.dataArray.push(i)
}
}
public addDataArray(dataArray:MessageData[]){
this.dataArray = dataArray
this.notifyDataReload()
}
// 获取索引对应的数据
public getData(index: number) {
return this.dataArray[index]
}
// 通知控制器数据增加
notifyDataAdd(index: number): void {
this.listeners.forEach(listener => {
listener.onDataAdd(index)
})
}
// 获取数据总数
public totalCount(): number {
return this.dataArray.length
}
// 注册改变数据的控制器
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)
}
}
public insertArrayAt(arr1:MessageData[],index:number,arr2:MessageData[]) {
arr1.splice(index,0,...arr2)
return arr1
}
// 在数据尾部增加元素
public addFirstItem(): void {
this.dataArray.unshift(new MessageData("0","顶部元素"))
this.notifyDataAdd(0)
}
public addData(index: number, data: MessageData): void {
this.dataArray.splice(index, 0, data);
this.notifyDataAdd(index);
}
notifyDataReload(): void {
this.listeners.forEach(listener => {
listener.onDataReloaded();
})
}
}
@Observed
class MessageData{
text?:string
pic:string|undefined
constructor(text: string, pic: string | undefined) {
this.text = text;
this.pic = pic;
}
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS后台播放失效问题
1410浏览 • 1回复 待解决
HarmonyOS auto失效
684浏览 • 1回复 待解决
HarmonyOS 设置userAgent失效
860浏览 • 1回复 待解决
HarmonyOS instanceof判断失效
822浏览 • 1回复 待解决
HarmonyOS webView缓存失效
659浏览 • 1回复 待解决
HarmonyOS keyboardHeightChange键盘监听失效
1171浏览 • 1回复 待解决
HarmonyOS 网络变化监听失效
1014浏览 • 1回复 待解决
HarmonyOS 卡片点击事件失效
1590浏览 • 1回复 待解决
HarmonyOS WebView 圆角设置失效
965浏览 • 1回复 待解决
HarmonyOS 多语言修改失效
1241浏览 • 1回复 待解决
HarmonyOS 屏幕常亮设置失效
923浏览 • 1回复 待解决
HarmonyOS 安全区域失效
1037浏览 • 1回复 待解决
HarmonyOS Column中嵌入Scroll时,底部元素导致安全区域失效问题
1650浏览 • 1回复 待解决
HarmonyOS git库屏蔽文件失效
873浏览 • 1回复 待解决
HarmonyOS Span的属性设置失效
805浏览 • 1回复 待解决
HarmonyOS Web 图片上传功能失效
1089浏览 • 1回复 待解决
HarmonyOS TextInput设置showCounter时,margin失效
923浏览 • 1回复 待解决
HarmonyOS中为什么会出现网络请求过后数据类类方法失效的问题?
698浏览 • 0回复 待解决
HarmonyOS 首选项回调失效
1062浏览 • 1回复 待解决
HarmonyOS flutter video_compress视频压缩兼容问题和image_crop图片剪裁失效兼容问题
1039浏览 • 1回复 待解决
RelativeContainer布局嵌套Stack失效
1145浏览 • 1回复 待解决
HarmonyOS升级版本后音量监听失效
1607浏览 • 1回复 待解决
HarmonyOS Grid组件的onItemDragMove事件冲突失效
996浏览 • 1回复 待解决
HarmonyOS Image获取焦点和失去焦点失效
826浏览 • 1回复 待解决
HarmonyOS waterFlow嵌套在list导致重用失效
1048浏览 • 1回复 待解决
是keyGenerator中keyGenerator设置的问题,在操作数据的增删改的情况下要保证keyGenerator的值不能重复,请把如下代码替换下试试