HarmonyOS鸿蒙Next应用开发练习:单向数据传送与双向数据传送
HarmonyOS鸿蒙Next应用开发练习:单向数据传送与双向数据传送 视图效果查看
点击按钮,可以把设置好的值传递到另外一个界面进行展示。
MainAbilitySlice.java 文件
package com.example.ability_ui_demo.slice;
import com.example.ability_ui_demo.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.colors.RgbColor;
import ohos.agp.components.*;
import ohos.agp.components.element.ShapeElement;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
public class MainAbilitySlice extends AbilitySlice {
private static HiLogLabel c_hll = new HiLogLabel(HiLog.LOG_APP, 0x0908, "T.F.xie");
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
setUIContent(ResourceTable.Layout_ability_main);
Text text = (Text)findComponentById(ResourceTable.Id_test_text);
Button button = (Button) findComponentById(ResourceTable.Id_test_button);
ShapeElement element = new ShapeElement();
element.setCornerRadius(18);
element.setRgbColor(new RgbColor(43, 156, 15));
button.setBackground(element);
button.setClickedListener(new Component.ClickedListener() {
private int a = 0;
@Override
public void onClick(Component component) {
a++;
text.setText("Clicked:" + a);
Intent intent1 = new Intent();
intent1.setParam("p1", 123);
intent1.setParam("p2", 0.123f);
intent1.setParam("p3", "小黑");
presentForResult(new TargetSlice(), intent1, 0);
}
});
}
@Override
protected void onResult(int requestCode, Intent intent){
if (requestCode == 0){
String s = intent.getStringParam("result");
HiLog.info(c_hll, "MainAbilitySlice.onStar()");
}
}
}
TargetSlice.java
package com.example.ability_ui_demo.slice;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.*;
import ohos.agp.components.element.ShapeElement;
import ohos.agp.utils.Color;
import ohos.agp.utils.TextAlignment;
public class TargetSlice extends AbilitySlice {
// 定义一个容器对象,使用绝对定位来管理组件容器
ComponentContainer container = new PositionLayout(this);
@Override
public void onStart(Intent intent) {
super.onStart(intent);
container.setWidth(ComponentContainer.LayoutConfig.MATCH_PARENT);
container.setHeight(ComponentContainer.LayoutConfig.MATCH_PARENT);
ShapeElement element = new ShapeElement();
String data = "";
data += intent.getIntParam("p1", 0);
data += " " + intent.getFloatParam("p2", 0);
data += " " + intent.getStringParam("p3");
Text text = new Text(this);
text.setText(data);
text.setTop(200);
text.setLeft(100);
text.setWidth(300);
text.setHeight(40);
text.setTextColor(Color.RED);
text.setTextSize(36);
text.setTextAlignment(TextAlignment.CENTER);
container.addComponent(text);
super.setUIContent(container);
}
@Override
public void onActive() {
super.onActive();
Intent intent = new Intent();
intent.setParam("result", "蛟龙腾飞");
setResult(intent);
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
更多关于HarmonyOS鸿蒙Next应用开发练习:单向数据传送与双向数据传送的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next应用开发中,单向数据传送和双向数据传送是两种常见的数据通信模式。
单向数据传送通常用于数据从源端单向传递到目标端,目标端无法直接向源端发送数据。这种模式适用于数据流方向明确且不需要反馈的场景,如传感器数据采集、日志记录等。在鸿蒙OS中,可以通过事件总线(EventBus)或消息队列(MessageQueue)实现单向数据传送。事件总线允许组件之间通过发布和订阅事件进行通信,而消息队列则通过生产者-消费者模式实现数据的异步传递。
双向数据传送则允许数据在源端和目标端之间双向流动,适用于需要双向交互的场景,如设备控制、实时通信等。在鸿蒙OS中,可以通过Ability之间的通信机制实现双向数据传送。例如,使用AbilitySlice
的startAbilityForResult
方法启动另一个Ability,并通过onAbilityResult
方法接收返回结果。此外,还可以使用RemoteObject
和IRemoteBroker
接口实现跨进程的双向通信。
在开发过程中,开发者需要根据具体需求选择合适的数据传送模式,并遵循鸿蒙OS的API规范进行实现。
更多关于HarmonyOS鸿蒙Next应用开发练习:单向数据传送与双向数据传送的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next应用开发中,单向数据传送和双向数据传送是两种常见的数据交互方式。
单向数据传送:数据仅从一个组件流向另一个组件,通常用于父组件向子组件传递数据。例如,父组件通过@State
或@Prop
装饰器将数据传递给子组件,子组件只能读取数据,不能修改。
双向数据传送:数据在组件之间双向流动,通常用于表单输入等场景。通过@Link
装饰器,父组件和子组件可以共享同一数据源,子组件可以修改数据并同步到父组件。
练习时,可以通过简单的父子组件结构,分别实现单向和双向数据传送,理解其应用场景和实现方式。