HarmonyOS 鸿蒙Next 请问bindpopup和bindmenu不能同时绑定在一个组件上面吗

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

HarmonyOS 鸿蒙Next 请问bindpopup和bindmenu不能同时绑定在一个组件上面吗 我是通过点击事件和长按事件,分别绑定了bindPopup和bindMenu,但是当我点击或者长按,两个是都是同时出来的,他们的builder也不同,但还是同时出来,我写了个简单的例子,有没有大佬知道,他们是不能一起混用吗,我想实现的场景是,长按出现复制那些选项的builder,点击后弹出一个popup是另外一些东西的builder,如果这样不行,那么这种场景怎么实现呢

@Entry
@Component
struct LongPressGestureExample {
  @State count: number = 0
  @State isShow: boolean = false
  @State isPopup: boolean = false

  @Builder
  bindmenuBuilder(){
    Row(){
      Text('1')
      Text('1')
      Text('1')
      Text('1')
      Text('1')
      Text('1')
      Text('1')
      Text('1')
      Text('1')
    }
  }

  @Builder
  bindPopupBuilder(){
    Row(){
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
    }
  }

  build() {
    Column() {
      Text('LongPress onAction:' + this.count).fontSize(28)
        // 单指长按文本触发该手势事件
        .gesture(
          LongPressGesture({ repeat: true })
            // 由于repeat设置为true,长按动作存在时会连续触发,触发间隔为duration(默认值500ms)
            .onAction((event: GestureEvent) => {
              if (event && event.repeat) {
                this.count++
              }
            })
            // 长按动作一结束触发
            .onActionEnd((event: GestureEvent) => {
              this.isShow = true
              this.count = 0
            })
        )
        .onClick(() => {
          this.isPopup = true
          this.count--
        })
        .bindContextMenu(this.isShow, this.bindmenuBuilder())
        .bindPopup(this.isPopup, { builder: this.bindPopupBuilder() })
    }
    .height(200)
    .width(300)
    .padding(20)
    .border({ width: 3 })
    .margin(30)
  }
}

更多关于HarmonyOS 鸿蒙Next 请问bindpopup和bindmenu不能同时绑定在一个组件上面吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

可以混用,你写法不对吧,参考demo:

@Entry
@Component
struct BindDemo {
  @State count: number = 0
  @State isShow: boolean = false
  @State isPopup: boolean = false

  @Builder
  bindmenuBuilder() {
    Row() {
      Text('1')
      Text('1')
      Text('1')
      Text('1')
      Text('1')
      Text('1')
      Text('1')
      Text('1')
      Text('1')
    }
  }

  @Builder
  bindPopupBuilder() {
    Row() {
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
      Text('2')
    }
  }

  build() {
    Column() {
      Text('LongPress onAction:' + this.count)
        .fontSize(28)// 单指长按文本触发该手势事件
        .gesture(
          LongPressGesture({ repeat: true })// 由于repeat设置为true,长按动作存在时会连续触发,触发间隔为duration(默认值500ms)
            .onAction((event: GestureEvent) => {
              this.isPopup = false
              if (event && event.repeat) {
                this.count++
              }
            })// 长按动作一结束触发
            .onActionEnd((event: GestureEvent) => {
              this.isPopup = false
              this.isShow = true
              this.count = 0
            })
        )
        .onClick(() => {
          this.isShow = false
          this.isPopup = true
          this.count--
        })
        .bindContextMenu(this.isShow, this.bindmenuBuilder())
        .bindPopup(this.isPopup, { builder: this.bindPopupBuilder() })
    }
    .height(200)
    .width(300)
    .padding(20)
    .border({ width: 3 })
    .margin(30)
  }
}

更多关于HarmonyOS 鸿蒙Next 请问bindpopup和bindmenu不能同时绑定在一个组件上面吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,bindpopupbindmenu 是否能同时绑定在一个组件上,这取决于鸿蒙系统的组件机制和API设计。通常情况下,一个组件的交互行为设计是独立的,不同的交互行为(如弹出窗口和菜单)可能会冲突或相互干扰,因此系统可能不允许在同一个组件上同时绑定这两种行为。

具体到bindpopupbindmenu,它们分别用于绑定弹出窗口和菜单事件。在鸿蒙的开发文档中,并没有明确说明这两个属性是否可以同时绑定在同一个组件上。但根据一般的UI设计原则和系统API的设计逻辑,同时绑定可能会导致不可预知的行为或错误。

因此,在鸿蒙系统中,建议不要在同一个组件上同时绑定bindpopupbindmenu。如果需要实现类似的功能,可以考虑使用其他方式,如通过编程逻辑在特定条件下动态显示弹出窗口或菜单,或者将这两个功能分散到不同的组件上。

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

回到顶部