HarmonyOS 鸿蒙Next 有两个Grid,如何把item从一个Grid拖入另一个Grid

HarmonyOS 鸿蒙Next 有两个Grid,如何把item从一个Grid拖入另一个Grid 有两个Grid,如何把item从一个Grid拖入另一个Grid。

2 回复

提供一个案例给您借鉴一下:

changeIndex(index1: number, index2: number) { //交换数组位置
  let numberArr: Array<string> = this.whoIsStart == 0 ? this.numbers : this.numbers1;
  let temp: string;
  temp = numberArr[index1] + "";
  if (this.whoIsStart == 0 && index2 != -1) {
    this.numbers[index1] = numberArr[index2];
    this.numbers[index2] = temp;
  } else if (this.whoIsStart == 1 && index2 != -1) {
    this.numbers1[index1] = numberArr[index2];
    this.numbers1[index2] = temp;
  }
  this.changeData = [];
  this.text = "";
  this.whoIsStart = -1;
}

第一个 grid:

.onItemDragStart((event: ItemDragInfo, itemIndex: number) => { //第一次拖拽此事件绑定的组件时,触发回调。
  if (this.whoIsStart == 1) {
    return;
  }
  this.text = this.numbers[itemIndex]
  this.whoIsStart = 0;
  this.changeData[0] = itemIndex;
  return this.pixelMapBuilder() //设置拖拽过程中显示的图片。
})
.onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number,
  isSuccess: boolean) => { //绑定此事件的组件可作为拖拽释放目标,当在本组件范围内停止拖拽行为时,触发回调。
  // isSuccess=false时,说明drop的位置在grid外部;insertIndex > length时,说明有新增元素的事件发生
  if (this.whoIsStart == 1) {
    return;
  }
  if (!isSuccess || insertIndex >= this.numbers.length) {
    return
  }
  this.changeData[1] = insertIndex;
  this.changeIndex(this.changeData[0], this.changeData[1])
  console.info('beixiang 起点' + itemIndex + '', insertIndex + '') //itemIndex拖拽起始位置,insertIndex拖拽插入位置
})

第二个 grid:

.onItemDragStart((event: ItemDragInfo, itemIndex: number) => { //第一次拖拽此事件绑定的组件时,触发回调。
  if (this.whoIsStart == 0) return;
  this.text = this.numbers1[itemIndex]
  this.changeData[0] = itemIndex;
  this.whoIsStart = 1;
  return this.pixelMapBuilder() //设置拖拽过程中显示的图片。
})
.onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number,
  isSuccess: boolean) => { //绑定此事件的组件可作为拖拽释放目标,当在本组件范围内停止拖拽行为时,触发回调。
  // isSuccess=false时,说明drop的位置在grid外部;insertIndex > length时,说明有新增元素的事件发生
  if (this.whoIsStart == 0) {
    return;
  }
  if (!isSuccess || insertIndex >= this.numbers.length) {
    return
  }
  this.changeData[1] = insertIndex;
  console.info('beixiang 终点' + itemIndex + '', insertIndex + '') //itemIndex拖拽起始位置,insertIndex拖拽插入位置
  console.info('beixiang 终点' + this.changeData) //itemIndex拖拽起始位置,insertIndex拖拽插入位置
  this.changeIndex(this.changeData[0], this.changeData[1])
}

更多关于HarmonyOS 鸿蒙Next 有两个Grid,如何把item从一个Grid拖入另一个Grid的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,若你希望实现将item从一个Grid拖入另一个Grid的功能,可以通过以下步骤进行处理:

  1. 事件监听:首先,为源Grid设置拖拽事件监听器,监听用户的拖拽动作。当用户开始拖拽某个item时,记录该item的信息。

  2. 数据传递:在用户拖拽过程中,系统需要持续跟踪拖拽的item。这通常涉及到数据的临时存储和传递,确保在拖拽结束时,目标Grid能够接收到正确的数据。

  3. 目标Grid接收:为目标Grid设置放下(drop)事件监听器。当用户将item拖拽到目标Grid并释放时,目标Grid的放下事件被触发,此时可以处理数据的接收和UI的更新。

  4. UI更新:根据拖拽的结果,更新源Grid和目标Grid的UI显示。这包括从源Grid中移除拖拽的item,以及在目标Grid中添加该item。

  5. 数据同步:确保应用的数据模型与UI显示保持一致,可能需要在拖拽操作完成后,对应用的数据结构进行相应的调整。

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

回到顶部