因为在写这篇文章时,鸿蒙的Fa卡片还处于开发内测阶段,所以并没有相关的官方文档,然后也就不多解释了,直接撸代码。
使用actions,其中routerEvent和messageEvent最大区别显而易见了,bundleName、abilityName两个参数的区别。适用方法是一样的,都是在hml文件中使用@click去调用。
routerEvent指定了bundleName、abilityName,机会传值给对应的ability同时拉起。
messageEvent则直接给卡片对应的默认ability发message消息。
- 卡片JS示例:
export default {
data: {
},
actions:{
routerEvent: {
action: "router",
bundleName: "cn.miao.miaofa",
abilityName: "cn.miao.miaofa.WebViewAbility",
params: {
message: "weather",
pageName: "blood_pressure"
}
},
messageEvent: {
action: "message",
params: {
message: "weather update"
}
}
}
}
- Ability示例(routerEvent)
//- WebViewAbility
@Override
public void onStart(Intent intent) {
String StrParams = intent.getStringParam("params"); //- 卡片传过来的值
ZSONObject Data = ZSONObject.stringToZSON(StrParams); //- 接收值转Zson对象
System.out.println(Data.getString("pageName")); //- 打印接收值,pageName是卡片Js示例中的params中的pageName
}
- Ability示例(messageEvent)
注意哦,这次不是在onStart方法里 了.
//- 这里是卡片默认的ability,不需要指定
@Override
protected void onTriggerFormEvent(long formId, String message) {
System.out.println("点击Card:"+formId + "|" + message); //- 非常简单,这个方法直接就能接收到点击
ZSONObject zsonObject = new ZSONObject(); //- 初始化一个新对象(这一行属于赠送内容哈哈哈哈)
zsonObject.put("Title", "我是一个新的值噗"); //- 给对象添加值(这一行属于赠送内容哈哈哈哈)
FormBindingData formBindingData = new FormBindingData(zsonObject);//- 讲对象绑定到Form(这一行属于赠送内容哈哈哈哈)
try {
if (!updateForm(formId, formBindingData)) {}//- 使用updateForm更新桌面上的卡片信息(这一行属于赠送内容哈哈哈哈)
} catch (FormException e) {
e.printStackTrace();
}
super.onTriggerFormEvent(formId, message);
}
关于Js传值给Ability接收参数,本文中的intent.getStringParam("params");暂时仅适用本文的案例,关于JS页面传值给Java层的案例,请参考《鸿蒙(HarmonyOS)-Fa应用【Js页面】启动一个指定的Ability(分布式拉起)》