在 OpenHarmony 中,ListView 闪退通常不是 ListView 本身的问题,而是数据、组件使用或生命周期用法不当导致的。下面按常见原因 + 解决办法给你梳理一下(以 ArkUI / eTS 为主)。
data 为 undefined 或 nullList({ data: this.list }) // this.list 未初始化
✅ 正确做法:
@State list: Array<string> = []
undefined例如:
Text(item.name) // item 为 undefined
✅ 建议加保护:
Text(item?.name ?? '')
ForEach 但 key 不唯一或为 undefinedForEach(this.list, (item) => {
ListItem() {
Text(item)
}
})
❌ 容易崩溃
✅ 推荐:
ForEach(this.list, (item, index) => {
ListItem() {
Text(item)
}
}, (item) => item.id) // 必须有唯一 key
例如:
ListItem() {
if (this.x.y.z) { } // 报错直接闪退
}
✅ 建议:
@State / @Observedthis.list.push(...)
❌ 不会触发刷新,甚至可能导致异常
✅ 正确:
this.list = [...this.list, newItem]
aboutToAppear 之前访问 UI 相关对象例如:
✅ 应放在:
aboutToAppear()
✅ 检查:
compileSdkVersion你可以依次检查:
@Entry
@Component
struct PageExample {
@State list: string[] = ['A', 'B', 'C']
build() {
Column() {
List({ space: 10 }) {
ForEach(this.list, (item: string) => {
ListItem() {
Text(item)
}
}, (item: string) => item)
}
}
}
}
你可以贴出:
我可以直接帮你定位是哪一行导致的闪退。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。