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

2 回复

在HarmonyOS鸿蒙Next应用开发中,单向数据传送和双向数据传送是两种常见的数据通信模式。

单向数据传送通常用于数据从源端单向传递到目标端,目标端无法直接向源端发送数据。这种模式适用于数据流方向明确且不需要反馈的场景,如传感器数据采集、日志记录等。在鸿蒙OS中,可以通过事件总线(EventBus)或消息队列(MessageQueue)实现单向数据传送。事件总线允许组件之间通过发布和订阅事件进行通信,而消息队列则通过生产者-消费者模式实现数据的异步传递。

双向数据传送则允许数据在源端和目标端之间双向流动,适用于需要双向交互的场景,如设备控制、实时通信等。在鸿蒙OS中,可以通过Ability之间的通信机制实现双向数据传送。例如,使用AbilitySlicestartAbilityForResult方法启动另一个Ability,并通过onAbilityResult方法接收返回结果。此外,还可以使用RemoteObjectIRemoteBroker接口实现跨进程的双向通信。

在开发过程中,开发者需要根据具体需求选择合适的数据传送模式,并遵循鸿蒙OS的API规范进行实现。

更多关于HarmonyOS鸿蒙Next应用开发练习:单向数据传送与双向数据传送的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next应用开发中,单向数据传送和双向数据传送是两种常见的数据交互方式。

单向数据传送:数据仅从一个组件流向另一个组件,通常用于父组件向子组件传递数据。例如,父组件通过@State@Prop装饰器将数据传递给子组件,子组件只能读取数据,不能修改。

双向数据传送:数据在组件之间双向流动,通常用于表单输入等场景。通过@Link装饰器,父组件和子组件可以共享同一数据源,子组件可以修改数据并同步到父组件。

练习时,可以通过简单的父子组件结构,分别实现单向和双向数据传送,理解其应用场景和实现方式。

回到顶部