HarmonyOS 鸿蒙Next grid合并单元格后如何进行排序

HarmonyOS 鸿蒙Next grid合并单元格后如何进行排序

grid合并单元格后用onItemDragStart方法会有遮挡等问题,有没有用forEach渲染对象数组的后grid合并单元格拖动排序的例子

2 回复

参考如下Demo,输入一个对象数组,使用数组生成一个多行多列的列表布局,并且在item拖动后原始数组数据能够实时更新。

class ItemClass {
  id: number = 0
  lable: string = ''

constructor(id: number, lable: string) { this.id = id this.lable = lable } }

@Entry @Component struct GridExample { @State items: ItemClass[] = [] scroller: Scroller = new Scroller() @State text: ItemClass = new ItemClass(0, ‘Item 0’)

@Builder pixelMapBuilder() { // 拖拽过程样式 Column() { Text(this.text.lable) .fontSize(16) .backgroundColor(0xF9CF93) .width(80) .height(80) .textAlign(TextAlign.Center) } }

aboutToAppear() { for (let i = 1; i <= 15; i++) { this.items.push(new ItemClass(i, 'Item ’ + i.toString())) } }

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

build() { Column({ space: 5 }) { Grid(this.scroller) { ForEach(this.items, (day: ItemClass) => { GridItem() { Text(day.lable) .fontSize(16) .backgroundColor(0xF9CF93) .width(80) .height(80) .textAlign(TextAlign.Center) } }) } .columnsTemplate(‘1fr 1fr 1fr’) .columnsGap(10) .rowsGap(10) .width(‘90%’) .backgroundColor(0xFAEEE0) .height(300) .editMode(true) //设置Grid是否进入编辑模式,进入编辑模式可以拖拽Grid组件内部GridItem .onItemDragStart((event: ItemDragInfo, itemIndex: number) => { //第一次拖拽此事件绑定的组件时,触发回调。 this.text = this.items[itemIndex] return this.pixelMapBuilder() //设置拖拽过程中显示的图片。 }) .onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => { //绑定此事件的组件可作为拖拽释放目标,当在本组件范围内停止拖拽行为时,触发回调。 // isSuccess=false时,说明drop的位置在grid外部;insertIndex > length时,说明有新增元素的事件发生 if (!isSuccess || insertIndex >= this.items.length) { return } console.info(‘beixiang’ + itemIndex + ‘’, insertIndex + ‘’) //itemIndex拖拽起始位置,insertIndex拖拽插入位置 this.changeIndex(itemIndex, insertIndex) }) }.width(‘100%’).margin({ top: 5 }) } } <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

更多关于HarmonyOS 鸿蒙Next grid合并单元格后如何进行排序的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,针对Next grid组件合并单元格后的排序问题,可以通过以下步骤实现:

  1. 数据预处理:在合并单元格前,根据排序需求对数据进行预处理。例如,如果要对某列进行排序,且该列存在合并单元格,可以先将合并单元格所代表的范围值统一处理为同一基准值(如合并单元格的首个值或最后一个值),再进行排序。

  2. 自定义排序逻辑:Next grid本身可能不支持直接对合并单元格后的数据进行排序,因此需要在排序时自定义逻辑,考虑合并单元格的范围和排序规则。

  3. 更新UI:排序完成后,根据新的数据顺序更新Next grid的UI,同时调整合并单元格的显示,确保合并关系在排序后依然正确。

  4. 重绘合并单元格:排序后,需要重新绘制合并单元格,确保它们在新的数据顺序中仍然正确显示。

  5. 测试验证:对排序后的Next grid进行充分测试,确保合并单元格和排序逻辑的正确性。

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

回到顶部