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后台播放失效问题
134浏览 • 1回复 待解决
HarmonyOS升级版本后音量监听失效
153浏览 • 0回复 待解决
HarmonyOS Entry和Hsp中创建的单例失效
136浏览 • 1回复 待解决
HarmonyOS napi callback是否会失效或被提前销毁
44浏览 • 1回复 待解决
RelativeContainer布局嵌套Stack失效
154浏览 • 1回复 待解决
span组件使用margin属性失效
1583浏览 • 1回复 待解决
deveco studio的自动补全提示时常失效
10990浏览 • 2回复 已解决
控件enabled设置为false时,hover失效
1816浏览 • 1回复 待解决
明明有主键索引,为什么mysql索引失效?
3468浏览 • 1回复 待解决
鸿蒙系统浦发银行APP,key失效
4058浏览 • 1回复 待解决
nginx缓存导致页面失效什么原因啊?
2128浏览 • 1回复 待解决
自定义文件模板失效怎么办啊?
71浏览 • 1回复 待解决
状态栏设置颜色失效该怎么办啊?
1621浏览 • 1回复 待解决
HarmonyOS Toggle问题
159浏览 • 0回复 待解决
HarmonyOS setResponseData问题
76浏览 • 1回复 待解决
Mate 40pro机型上再屏幕两测touch事件失效
1366浏览 • 1回复 待解决
HarmonyOS全屏页面跳转至下一非全屏界面,然后再返回至全屏界面,发现全屏设置已失效
126浏览 • 1回复 待解决
HarmonyOS startAbility问题
129浏览 • 1回复 待解决
HarmonyOS AccountKit相关问题
170浏览 • 1回复 待解决
HarmonyOS wifi 扫描问题
157浏览 • 1回复 待解决
HarmonyOS录音报错问题
170浏览 • 1回复 待解决
HarmonyOS resourceManager使用问题
139浏览 • 1回复 待解决
HarmonyOS 跳转页面问题
102浏览 • 1回复 待解决
HarmonyOS soundpool使用问题
109浏览 • 1回复 待解决
HarmonyOS 证书相关问题
137浏览 • 1回复 待解决
是keyGenerator中keyGenerator设置的问题,在操作数据的增删改的情况下要保证keyGenerator的值不能重复,请把如下代码替换下试试