在 OpenHarmony(ArkUI / eTS) 中,ListView(现在更常用 List 组件)动态加载通常指:
下面按常见场景给你说明(以 ArkTS + List 为例,适用于 OpenHarmony 3.2+)。
OpenHarmony 的 List 是 数据绑定驱动 的,只要数据源变化,列表就会自动更新。
@Entry
@Component
struct ListViewDemo {
@State items: string[] = ['A', 'B', 'C']
build() {
Column() {
Button('加载更多')
.onClick(() => {
this.items.push(`Item ${this.items.length + 1}`)
})
List() {
ForEach(this.items, (item) => {
ListItem() {
Text(item)
.fontSize(20)
.padding(10)
}
}, item => item)
}
}
}
}
✅ 关键点:
@Stateitems 数组即可动态刷新onScrollIndex@Entry
@Component
struct AutoLoadList {
@State items: number[] = []
private page = 0
aboutToAppear() {
this.loadData()
}
loadData() {
const newData = []
for (let i = 0; i < 20; i++) {
newData.push(this.page * 20 + i)
}
this.items.push(...newData)
this.page++
}
build() {
List() {
ForEach(this.items, (item) => {
ListItem() {
Text(`Item ${item}`)
.fontSize(18)
.padding(10)
}
}, item => item.toString())
}
.onScrollIndex((start, end) => {
if (end >= this.items.length - 1) {
this.loadData()
}
})
}
}
✅ 适合:
当数据量很大时,用 LazyForEach 而不是 ForEach
class MyDataSource extends BasicDataSource<number> {
private data: number[] = []
totalCount(): number {
return this.data.length
}
getData(index: number): number {
return this.data[index]
}
addData(data: number[]) {
this.data.push(...data)
this.notifyDataAdd(this.data.length - data.length)
}
}
@Entry
@Component
struct LazyListDemo {
private dataSource = new MyDataSource()
private page = 0
aboutToAppear() {
this.load()
}
load() {
const arr = []
for (let i = 0; i < 20; i++) {
arr.push(this.page * 20 + i)
}
this.dataSource.addData(arr)
this.page++
}
build() {
List() {
LazyForEach(this.dataSource, (item) => {
ListItem() {
Text(`Item ${item}`)
}
}, item => item.toString())
}
.onScrollIndex((start, end) => {
if (end >= this.dataSource.totalCount() - 1) {
this.load()
}
})
}
}
@State / @Link / AppStorageitems[0] = x)| 场景 | 推荐方式 |
|---|---|
| 少量数据 | ForEach |
| 大量数据 | LazyForEach |
| 自动加载 | onScrollIndex |
| 下拉刷新 | Refresh 组件 |
如果你告诉我:
我可以给你 更精确的示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。