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后台播放失效问题
527浏览 • 1回复 待解决
HarmonyOS auto失效
63浏览 • 1回复 待解决
HarmonyOS instanceof判断失效
42浏览 • 1回复 待解决
HarmonyOS webView缓存失效
18浏览 • 1回复 待解决
HarmonyOS 设置userAgent失效
26浏览 • 1回复 待解决
HarmonyOS WebView 圆角设置失效
129浏览 • 1回复 待解决
HarmonyOS 卡片点击事件失效
22浏览 • 1回复 待解决
HarmonyOS 网络变化监听失效
53浏览 • 1回复 待解决
HarmonyOS Span的属性设置失效
22浏览 • 1回复 待解决
HarmonyOS 安全区域失效
36浏览 • 1回复 待解决
HarmonyOS Column中嵌入Scroll时,底部元素导致安全区域失效问题
471浏览 • 1回复 待解决
HarmonyOS 首选项回调失效
19浏览 • 1回复 待解决
RelativeContainer布局嵌套Stack失效
407浏览 • 1回复 待解决
HarmonyOS中为什么会出现网络请求过后数据类类方法失效的问题?
159浏览 • 0回复 待解决
HarmonyOS TextInput设置showCounter时,margin失效
308浏览 • 1回复 待解决
HarmonyOS Web 图片上传功能失效
258浏览 • 1回复 待解决
HarmonyOS waterFlow嵌套在list导致重用失效
24浏览 • 1回复 待解决
span组件使用margin属性失效
2052浏览 • 1回复 待解决
HarmonyOS升级版本后音量监听失效
573浏览 • 0回复 待解决
HarmonyOS Grid组件的onItemDragMove事件冲突失效
15浏览 • 1回复 待解决
HarmonyOS 怎么让listitem的侧滑按钮失效
25浏览 • 1回复 待解决
HarmonyOS 引用手机文件里面的css文件失效
20浏览 • 1回复 待解决
HarmonyOS napi callback是否会失效或被提前销毁
338浏览 • 1回复 待解决
HarmonyOS 设置宽度为100%则左右边距失效
37浏览 • 1回复 待解决
是keyGenerator中keyGenerator设置的问题,在操作数据的增删改的情况下要保证keyGenerator的值不能重复,请把如下代码替换下试试