HarmonyOS 鸿蒙Next list拖拽调整item顺序

发布于 1周前 作者 ionicwang 来自 鸿蒙OS

HarmonyOS 鸿蒙Next list拖拽调整item顺序

  • list 拖拽调整列表项顺序,但是只能在调整当前屏幕内的,拖拽到最底部 list 滚动如何实现
2 回复

参考以下demo:

interface dragObj {
imgUrl: Resource
text: string
}

@Entry
@Component
struct page240411142325083 {
@State numbers: dragObj[] = [];
scroller: Scroller = new Scroller();
@State currentIndex: number = 0
@State startIndex: number = 0
@State endIndex: number = 0

@Builder
pixelMapBuilder() { //拖拽过程样式
Column() {
Image(this.numbers[this.currentIndex].imgUrl)
.width('40')
.draggable(false)
Text(this.numbers[this.currentIndex].text)
.fontSize(16)
}
.width('100%')
.height(80)
.backgroundColor(0xF9CF93) // .width(80)
.justifyContent(FlexAlign.Center)
}

aboutToAppear() {
for (let i = 1; i <= 15; i++) {
this.numbers.push({
imgUrl: $r('app.media.background'),
text: i + ''
});
}
}

changeIndex(index1: number, index2: number) { //交换数组位置
let tmp = this.numbers[index1]
this.numbers[index1] = this.numbers[index2]
this.numbers[index2] = tmp;
}

build() {
Column({ space: 5 }) {
List({ space: 10, scroller: this.scroller }) {
ForEach(this.numbers, (item: dragObj, index: number) => {
ListItem() {
Column() {
Image(item.imgUrl)
.width('40')
.draggable(false)
Text(item.text)
.fontSize(16)
}
.width('100%')
.height(80)
.backgroundColor(0xF9CF93) // .width(80)
.justifyContent(FlexAlign.Center)
}
})
}
.width('90%')
.backgroundColor(0xFAEEE0)
.height(600)
.onScrollIndex((start: number, end: number, center: number) => {
console.log(`start=${start}`)
console.log(`end=${end}`)
this.startIndex = start
this.endIndex = end
})
.onItemDragStart((event: ItemDragInfo, itemIndex: number) => { //第一次拖拽此事件绑定的组件时,触发回调。
//
this.currentIndex = itemIndex
console.log(this.numbers[this.currentIndex].text)
return this.pixelMapBuilder(); //设置拖拽过程中显示的图片。
})
.onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => { //绑定此事件的组件可作为拖拽释放目标,当在本组件范围内停止拖拽行为时,触发回调。
if (insertIndex !== -1) {
console.info('beixiang' + itemIndex + '', insertIndex + '') //itemIndex拖拽起始位置,insertIndex拖拽插入位置
this.changeIndex(itemIndex, insertIndex)
}
})
.onItemDragMove((event: ItemDragInfo, itemIndex: number, insertIndex: number) => {
console.log(`insertIndex=${insertIndex}`)
if (insertIndex <= this.startIndex + 1 && insertIndex > 1) {
this.scroller.scrollToIndex(insertIndex - 2, true)
}
if (insertIndex >= this.endIndex - 1 && insertIndex < this.numbers.length - 1) {
this.scroller.scrollToIndex(this.startIndex + 2, true)
}
})
}.width('100%').margin({ top: 5 })
}
}

更多关于HarmonyOS 鸿蒙Next list拖拽调整item顺序的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,关于Next list拖拽调整item顺序的功能,通常涉及到UI组件的交互处理。鸿蒙系统提供了丰富的UI框架和组件库,允许开发者实现复杂的交互逻辑。

要实现拖拽调整item顺序,可以遵循以下步骤(不涉及具体代码实现):

  1. 使用可拖拽的组件:首先,确保你的列表项(item)使用了支持拖拽的UI组件。鸿蒙系统的UI框架可能提供了专门的拖拽组件或属性,需要查阅相关文档进行配置。

  2. 监听拖拽事件:为列表项添加拖拽事件监听器,以捕捉用户的拖拽动作。这通常包括开始拖拽、拖拽中、拖拽结束等事件。

  3. 更新列表顺序:在拖拽事件的处理逻辑中,根据用户的拖拽动作实时更新列表项的顺序。这可能涉及到对列表数据的重新排序和UI的刷新。

  4. 处理边界情况:考虑拖拽过程中的边界情况,如拖拽到列表外、拖拽到不可放置的区域等,确保用户体验的流畅性。

  5. 优化性能:在拖拽过程中,注意性能的优化,避免因为频繁的UI刷新导致卡顿。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部