HarmonyOS 鸿蒙Next bindContextMenu()可能有个Bug

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

HarmonyOS 鸿蒙Next bindContextMenu()可能有个Bug 我给一个List组的Item绑定了bindContextMenu事件,好让长按item的时候能显示菜单。但是我发现,当弹出菜单后我不点击菜单里的选择,而是想点击外部的空白地方来触发关闭菜单时,此时的点击事件会触发item的点击事件。

代码如下:

//列表
List({ scroller: this.mScroller }) {
  LazyForEach(this.listDataSource, (item: NoteRecordBean, index: number) => {
    ListItem() {
      NoteItemComp({
        data:item
      }).bindContextMenu(this.ItemMenu, ResponseType.LongPress,)
    }
  }, (item: NoteRecordBean, index?: number) => JSON.stringify(item) + index)
}
@Builder
ItemMenu() {
  Menu() {
    MenuItem({ content: '编辑笔记' })// 
      .onChange(() => {
        toast('编辑')
      })
    MenuItem({ content: '删除笔记' })// 
      .onChange(() => {
        toast('删除')
      })
  }
}

请问像这种情况是我的代码问题,还是bindContextMenu本身就有这个Bug


更多关于HarmonyOS 鸿蒙Next bindContextMenu()可能有个Bug的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

NoteItemComp的自定义组件是啥 代码展示具体点 我写的例子中 点击是不会触发MenuItem的点击事件

// xxx.ets
@Entry
@Component
struct Index111 {
  private iconStr: ResourceStr = $r("app.media.startIcon")

  @Builder
  MyMenu() {
    Menu() {
      MenuItem({ startIcon: this.iconStr, content: "菜单选项" })
      MenuItem({ startIcon: this.iconStr, content: "菜单选项" })
      MenuItem({ startIcon: this.iconStr, content: "菜单选项" }).onClick(() =>{
        console.error("xxxxx")
      })
    }
  }

  @Builder
  MyPreview() {
    Column() {
      Image($r('app.media.layered_image'))
        .width(200)
        .height(200)
    }
  }

  build() {
    Column({ space: 50 }) {
      Column() {
        Column() {
          Text('preview-builder')
            .width(200)
            .height(100)
            .textAlign(TextAlign.Center)
            .margin(100)
            .fontSize(30)
            .bindContextMenu(this.MyMenu, ResponseType.LongPress,
              {
                preview: this.MyPreview
              })
        }
      }.width('100%')
    }
  }
}

更多关于HarmonyOS 鸿蒙Next bindContextMenu()可能有个Bug的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


NoteItemComp是一个list组的item来的,我的触发menu是长按list组件的Item来显示bindContextMenu的菜单。还就是说不是说会触发menu里的item。而是点击menu之外的区域,而刚好这个区域是List的item时就会直接触发list的item的点击事件。

正常应该是点击menu的外部区域时,应该只是关闭menu而不会同时也响应外部的点击事件。你上面的那个代码中没有list组件,所以也就没有我说的那个情况吧。

你的这个问题可能和我之前提的是一个问题,你按照同样的方式改改看,这是连接 listitem 内部组件bindsheet 点击显示后弹出来两个-华为开发者问答 | 华为开发者联盟

onAppear: () => { this.itemContextMenuIsShowing = true console.log(TAG, ‘context menu onAppear’) }, onDisappear: () => { this.itemContextMenuIsShowing = false console.log(TAG, ‘context menu onDisappear’) }

针对帖子标题“HarmonyOS 鸿蒙Next bindContextMenu()可能有个Bug”的问题,以下是根据要求提供的回答:

在HarmonyOS鸿蒙系统中,如果你发现bindContextMenu()方法可能存在bug,这通常意味着该方法在特定条件下无法正常工作或表现出不符合预期的行为。bindContextMenu()方法一般用于为某个视图绑定上下文菜单,允许用户在特定视图上执行额外操作。

如果确认是系统层面的bug,可能涉及以下几个方面:

  1. 方法调用异常:在绑定上下文菜单时,如果发生崩溃或异常终止,可能是方法内部实现有误。
  2. 菜单显示问题:菜单未能正确显示,或显示位置、内容不符合预期。
  3. 交互问题:菜单的交互行为(如点击、滑动)不正常。

遇到此类问题,建议先检查自己的代码实现是否正确,包括是否正确设置了菜单项、是否正确调用了绑定方法、是否在合适的生命周期内调用等。如果确认代码无误且问题依旧存在,则可能是系统bug。

对于系统bug,你可以尝试查看HarmonyOS的官方文档或社区,看看是否有其他开发者遇到并报告了相同的问题。同时,也可以考虑在HarmonyOS的开发者论坛或相关社区中发帖询问。

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

回到顶部