HarmonyOS 鸿蒙Next中备忘录待办卡片无法调整顺序

HarmonyOS 鸿蒙Next中备忘录待办卡片无法调整顺序 在备忘录里设置待办事项,建立卡片放在matebook pro的电脑桌面上,无论是备忘录里还是卡片上,都无法通过拖拽调整顺序,及时新添加了待办事项。

3 回复

通过拖拽调整待办事项顺序可参考以下

实现思路

  1. 通过结合LongPressGesturePanGesture,共同实现列表手势拖动能力。
// 以下组合手势为顺序识别,当长按手势事件未正常触发时,则不会触发拖动手势事件
GestureGroup(GestureMode.Sequence,
  LongPressGesture()  // 长按
    .onAction((event: GestureEvent) => {
      // 记录长按状态
    }),
  PanGesture()        // 拖动
    .onActionStart(() => {
      // 计算list开始拖动的偏移
    })
    .onActionUpdate((event: GestureEvent) => {
      // 计算item移动坐标时,需要算上list滚动的距离
      // 获取手指信息
    })
    .onActionEnd((event: GestureEvent) => {
      // 拖拽结束后放置item
    })
)
  1. 通过animateTo,实现内容的拖动、放置和改变位置效果
onMove(item: T, offsetY: number): void {
  // 触发拖动时,被覆盖子组件缩小与恢复的动画
  let shrinkScale: number = 1 - value / 10; // 计算缩放比例,value值缩小10倍
  if (index < this.modifier.length - 1) { // 当拖拽的时候,被交换的对象会缩放
    this.modifier[index + 1].scale = direction > 0 ? shrinkScale : 1;
  }
  if (index > 0) {
    this.modifier[index - 1].scale = direction > 0 ? 1 : shrinkScale;
  }
  // 处理列表项的切换操作
  if (Math.abs(this.offsetY) > ITEM_HEIGHT / 2) {
    getUIContext()?.animateTo({ curve: Curve.Friction, duration: ANIMATE_DURATION }, () => {
      this.offsetY -= direction * ITEM_HEIGHT;
      this.dragRefOffset += direction * ITEM_HEIGHT;
      this.modifier[index].offsetY = this.offsetY;
      let target = index + direction // 目标位置索引
      if (target !== -1 && target <= this.modifier.length) 
        this.changeItem(index, target);
      }
    })
  }
}
  1. 拖拽结束后,通过animateTo,实现拖拽内容和被拖拽内容的恢复动画效果。
onDrop(item: T): void {
  // 通过interpolatingSpring(0, 1, 400, 38)构造插值器弹簧曲线对象初始速度为0,质量为1,刚度为400,阻尼为38
  getUIContext()?.animateTo({ curve: curves.interpolatingSpring(0, 1, 400, 38) }, () => {
    this.state = OperationStatus.DROPPING;
    if (index < this.modifier.length - 1) {
      this.modifier[index + 1].scale = 1;
    }
    if (index > 0) {
      this.modifier[index - 1].scale = 1;
    }
  })
  // 通过interpolatingSpring(14, 1, 170, 17)构造插值器弹簧曲线对象初始速度为14,质量为1,刚度为170,阻尼为17
  getUIContext()?.animateTo({ curve: curves.interpolatingSpring(14, 1, 170, 17) }, () => {
    this.state = OperationStatus.IDLE;
    this.modifier[index].hasShadow = false;
    this.modifier[index].scale = 1; // 初始化缩放比例
    this.modifier[index].offsetY = 0; // 初始化偏移量
  })
}

具体代码可参考文档

【背景知识】

待办事项可以通过animateToList组件、LongPressGesturePanGesture实现文件列表拖动、插入效果,满足待办事项便贴的基本需求。

手势处理
animateTo
LongPressGesture
PanGesture

更多关于HarmonyOS 鸿蒙Next中备忘录待办卡片无法调整顺序的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,备忘录待办卡片顺序调整功能当前版本暂不支持。系统默认按创建时间或修改时间自动排序,用户无法手动拖拽重新排列。该限制源于系统UI组件设计架构,待办卡片采用静态布局管理而非动态排序机制。如需调整显示顺序,可尝试修改待办事项的创建时间戳或通过删除重建方式实现。未来版本可能会通过组件更新增加排序功能。

目前HarmonyOS Next的备忘录待办卡片确实不支持直接拖拽调整顺序。这个功能限制可能是系统设计时的暂时方案,建议通过以下方式管理待办事项顺序:

  1. 在备忘录应用内手动调整待办项的排列顺序(如需置顶可尝试将重要事项重新创建)
  2. 利用备忘录的分类或标签功能对事项进行分组管理
  3. 关注后续系统更新,该功能可能会在版本迭代中优化

当前建议通过删除重建的方式实现顺序调整,虽然操作稍显繁琐,但能保证事项的正确排序。

回到顶部