HarmonyOS如何实现list listitem拖拽

list的ListItem设置了拖拽事件 但是在

.onDragMove((event: DragEvent, extraParams: string) => {   console.info('List onDragMove, ' + extraParams) })
  • 1.

extraParams 返回的数据都是空值 没有相应的index值。

HarmonyOS
2024-08-09 11:59:38
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
put_get

List不支持onDragMove事件,List有自己的拖拽事件onItemDragMove和onItemDrop,Demo如下:

@Entry 
@Component 
struct ListExample { 
  @State arr: number[] = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 
  @State dragItem: number = -1 
  // 拖动的元素,注意不是index 
  @Builder 
  dragFloatView(item: number) { 
    Column() { 
      Text('' + item) 
        .textAlign(TextAlign.Center) 
        .borderRadius(10) 
        .backgroundColor(Color.White) 
        .fontSize(16) 
        .width('100%') 
        .height(100) 
    } 
  } 
  build() { 
    Column() { 
      List({ space: 10 }) { 
        ForEach(this.arr, (item: number) => { 
          ListItem() { 
            Text('' + item) 
              .width('100%') 
              .height(100) 
              .fontSize(16) 
              .textAlign(TextAlign.Center) 
              .borderRadius(10) 
              .backgroundColor(0xFFFFFF) 
          } 
          .visibility(item == this.dragItem ? Visibility.Hidden : Visibility.Visible) 
          .id(item.toString()) 
        }, (item: string) => item) 
      } 
      .listDirection(Axis.Vertical) 
      .width('100%') 
      .onItemMove((from: number, to: number) => { 
        return true 
      }) 
      .onItemDragStart((event: ItemDragInfo, itemIndex: number) => { 
        // 开始拖拽列表元素时触发。 
        this.dragItem = this.arr[itemIndex] 
        return this.dragFloatView(this.arr[itemIndex]) 
      }) 
      .onItemDragMove((event: ItemDragInfo, itemIndex: number, insertIndex: number) => { 
        // 拖拽在列表元素范围内移动时触发。 
        animateTo({ duration: 200, curve: Curve.Linear }, () => { 
          let deleteIndex = this.arr.indexOf(Number(this.dragItem)) 
          this.arr.splice(deleteIndex, 1) 
          this.arr.splice(insertIndex, 0, Number(this.dragItem)) 
        }) 
      }) 
      .onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => { 
        // 绑定该事件的列表元素可作为拖拽释放目标,当在列表元素内停止拖拽时触发。 
        this.dragItem = -1 
      }) 
    } 
    .width('100%') 
    .height('100%') 
    .backgroundColor(0xDCDCDC) 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
分享
微博
QQ
微信
回复
2024-08-09 18:32:55


相关问题
HarmonyOS Listlistitem较少时无法拖拽
376浏览 • 1回复 待解决
HarmonyOS 如何实现Listitem拖拽排序
990浏览 • 1回复 待解决
ListListItem组件的使用
2573浏览 • 1回复 待解决
HarmonyOS 如何实现列表拖拽
770浏览 • 1回复 待解决
HarmonyOS 如何实现拖动改变ListItem顺序
820浏览 • 1回复 待解决
HarmonyOS 图片拖拽实现
890浏览 • 1回复 待解决
HarmonyOS 组件的拖拽如何实现
898浏览 • 1回复 待解决
HarmonyOS List第一个可见的ListItem
1074浏览 • 1回复 待解决
Grid如何实现拖拽功能
3412浏览 • 1回复 待解决
HarmonyOS GridRow 实现拖拽排序
678浏览 • 1回复 待解决