HarmonyOS 鸿蒙Next如何在无ui的类里创建ui组件

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

HarmonyOS 鸿蒙Next如何在无ui的类里创建ui组件

使用高德地图 创建marker图标时
BitmapDescriptorFactory.fromView(() => {
this.mapIcon();
})

@Builder
mapIcon() {
Image($rawfile(‘icon_map_video.png’))
.width(‘20vp’)
.height(‘20vp’)
}
在ui组件里正常,一旦我把事务逻辑抽出来之后,在无ui的util类里使用@Builder装饰器
BitmapDescriptorFactory.fromView(() => { mapIcon(); })
@Builder
function mapIcon() {
Image($rawfile(‘icon_map_video.png’))
.width(‘20vp’)
.height(‘20vp’)
}
之后就无法使用了

2 回复

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-wrapbuilder-V5

可以参考下这个文档,使用wrapBuilder + 全局[@Build](/user/Build)试试呢

在HarmonyOS鸿蒙Next系统中,在无UI的类(如服务或后台任务类)中直接创建UI组件通常是不被推荐的,因为这违反了UI组件应在UI线程和UI框架内管理的原则。然而,如果你确实需要在非UI类中触发UI更新,可以通过以下几种方式间接实现:

  1. 使用Handler或LiveData:通过消息传递机制(如Handler)或数据绑定机制(如LiveData),将需要在UI上展示的数据或事件传递到UI线程,然后在UI线程中更新UI组件。

  2. 使用BroadcastReceiver或EventBus:发送广播或使用事件总线(如EventBus),在UI组件所在的Activity或Fragment中接收这些广播或事件,并据此更新UI。

  3. 依赖注入或Service连接:通过依赖注入框架(如Hilt)或服务连接,将UI组件需要的服务或数据注入到UI组件中,实现数据的传递和UI的更新。

需要注意的是,无论采用哪种方式,都应确保数据传递和UI更新在UI线程中进行,以避免潜在的线程安全问题。

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

回到顶部