HarmonyOS 鸿蒙Next中List + Repeat是不是无法使用.moveTo来实现拖拽(API17上)
HarmonyOS 鸿蒙Next中List + Repeat是不是无法使用.moveTo来实现拖拽(API17上)
但是lazyDataSource是可以的
刚对比了下
- api23是可以的
- api17就有问题.moveTo以及repeat不是支持api12+么
6 回复
是不是用法有问题 有示例代码吗
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
List({ space: 8 }) {
Repeat<DragItem>(this.items)
.each((ri: RepeatItem<DragItem>) => {
ListItem() {
Row() {
Text("≡全屏")
.fontSize(20)
.fontColor('#999999')
.margin({ right: 12 })
Column() {
Text(`#${ri.item.id} ${ri.item.name}`)
.fontSize(15)
.fontColor('#222222')
Text(`当前索引: ${ri.index}`)
.fontSize(12)
.fontColor('#999999')
.margin({ top: 2 })
}
.alignItems(HorizontalAlign.Start)
.layoutWeight(1)
Text("⇅")
.fontSize(18)
.fontColor('#CCCCCC')
}
.hitTestBehavior(HitTestMode.None)
.width('100%')
.height(56)
.padding({ left: 14, right: 14 })
.borderRadius(10)
.backgroundColor(Color.White)
}
.draggable(true)
.margin({
left: 2,
right: 2,
top: 3,
bottom: 3
})
})
// key 用稳定 id,拖动时组件可复用、动画自然
.key((item: DragItem) => `${item.id}`)
// 大列表必开,保证只渲染可视区域
.virtualScroll({ totalCount: this.items.length })
// 拖动结束回调,from→to 是最终位置;必须同步改数组
.onMove((from: number, to: number) => {
this.onMove(from, to)
})
}
.height("100%")
.width('100%')
.padding({ left: 12, right: 12 })
.scrollBar(BarState.Off)
.edgeEffect(EdgeEffect.None)
在API 17的鸿蒙Next中,List 组件结合 Repeat 时,不支持直接使用 .moveTo 方法实现拖拽排序。.moveTo 适用于 Scroll 或普通组件位置控制,而 List 的拖拽需通过 onDragStart、onDrop 等事件或 dragDrop 属性完成。
Repeat 的 moveTo 方法自 API12 起就已支持,用于在数据源中移动数据并触发对应 UI 刷新。List 拖拽通常需要结合 onItemDragStart/onItemDrop 等事件调用 moveTo 实现排序。
API17 上 List + Repeat 组合中 moveTo 无法生效,而 LazyDataSource 可以,是因为早期版本的 List 组件对 Repeat 数据变更的响应实现不完整,未能正确重建列表项位置;API23 已修复该问题,属于系统能力迭代的正常差异。


