在 OpenHarmony(ArkUI) 里,所谓 ListView 联动,通常有以下几种常见场景,我分别说明做法(以 ArkTS + List 组件 为例):
List 是分类(如:水果、蔬菜)List 是内容scroller 控制滚动index 记录当前选中项scrollToIndex@Entry
@Component
struct LinkListExample {
private leftScroller: Scroller = new Scroller()
private rightScroller: Scroller = new Scroller()
@State leftIndex: number = 0
@State rightIndex: number = 0
private categories: string[] = ['水果', '蔬菜', '肉类']
private data: string[][] = [
['苹果', '香蕉', '橘子'],
['白菜', '萝卜', '西红柿'],
['猪肉', '牛肉', '鸡肉']
]
build() {
Row() {
// 左侧列表
List({ scroller: this.leftScroller }) {
ForEach(this.categories, (item, index) => {
ListItem() {
Text(item)
.fontColor(this.leftIndex === index ? '#f00' : '#000')
.onClick(() => {
this.leftIndex = index
this.rightScroller.scrollToIndex(index)
})
}
})
}
.width('30%')
// 右侧列表
List({ scroller: this.rightScroller }) {
ForEach(this.data, (group, index) => {
ListItemGroup() {
ForEach(group, (item) => {
ListItem() {
Text(item)
}
})
}
.onAppear(() => {
this.leftIndex = index
})
})
}
.width('70%')
}
}
}
✅ 关键点
scrollToIndex() 实现点击联动onAppear() 实现滑动联动ListList@State 保存当前 indexthis.topScroller.scrollToIndex(this.currentIndex)
List 负责内容ScrollView 负责指示器onScroll 监听偏移量.onScroll((offset) => {
this.indicatorY = offset / total * maxY
})
private scroller: Scroller = new Scroller()
scrollToIndex 默认是平滑滚动scrollToIndex(index, true)
ListItemGroup 才能正确联动分组@State 或 @LinkOpenHarmony API 8 之前
ListContainersetSelectedIndex()scrollTo你可以告诉我:
我可以给你 可直接跑的完整 Demo。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。