参考文档 :





一、AbilitySlice 之间的界面跳转

代码示例 GitHub 地址 : https://github.com/han1202012/HarmonyHelloWorld



1. Page Ability 设置 AbilitySlice :

创建两个 AbilitySlice , 初始状态下进入的是 MainAbilitySlice , 然后跳转到 MainAbilitySlice2 ;


初始 AbilitySlice 如下 , 在 onStart ( ) 方法中 , 调用 super.setUIContent ( ) 方法设置 XML 布局文件 , 相当于 Android 中的 setContentView ( ) 方法 ;

XML 布局文件使用 ResourceTable.Layout_ability_main 方式引用 ;

上述实际的布局文件是在 HarmonyHelloWorld\entry\src\main\resources\base\layout 目录下的 ability_main.xml 布局文件 ;

引用时在 ability_main 文件名称前 , 加上了 ResourceTable.Layout_ 前缀 , 相当于 Android 中的 R.layout. 前缀 ;

// 设置布局文件
super.setUIContent(ResourceTable.Layout_ability_main);


2. 获取按钮组件 , 并设置点击事件 :

在 AbilitySlice 中 , 调用 findComponentById ( ) 方法 , 可以获取按钮组件 ;

获取的对象类型是 Component , 需要强转为 Button 对象 ;

// 获取 XML 布局中的 Button 按钮
Button button = (Button) findComponentById(ResourceTable.Id_button);

设置按钮点击事件 : 调用 setClickedListener ( ) 方法 , 设置 Component.ClickedListener 类型的点击监听器 , 按钮被点击后 , 会自动回调 onClick ( ) 方法 ;

        // 设置 Button 按钮点击事件
        button.setClickedListener(new Component.ClickedListener() {
            @Override
            public void onClick(Component component) {
            }
        });


3. 获取 Text 组件 , 并设置显示内容 : 调用 findComponentById ( ) 方法获取 Text 组件 , 需要强制转换 ;

调用 Text 组件的 setText ( ) 方法 , 设置组件显示的文字内容 ;

        // 获取 Text 文字显示组件
        Text text = (Text) findComponentById(ResourceTable.Id_text);

        // 获取 Intent 中的数据 , 并显示到界面中
        text.setText("页面 2 数据 : " + intent.getIntParam("DATA", 0));


4. 页面跳转 :

① 创建 AbilitySlice : 创建要跳转到的 AbilitySlice 对象 ;

② 创建 Intent : 用于数据传递 ;

③ 调用 present ( ) 方法 : 传入 AbilitySlice 与 Intent 参数 , 即可完成 AbilitySlice 界面跳转 ;

                // 1. 初始化要跳转的界面
                AbilitySlice slice = new MainAbilitySlice2();

                // 2. 初始化传递的 Intent 意图
                Intent intent = new Intent();
                intent.setParam("DATA", 888);

                // 3. 跳转到 MainAbilitySlice2 界面
                present(slice, intent);




二、完整代码示例

MainAbilitySlice 源码 :

package com.example.harmony.slice;

import com.example.harmony.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.components.Text;

public class MainAbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);

        // 获取 XML 布局中的 Button 按钮
        Button button = (Button) findComponentById(ResourceTable.Id_button);

        // 设置 Button 按钮点击事件
        button.setClickedListener(new Component.ClickedListener() {
            @Override
            public void onClick(Component component) {
                // 初始化要跳转的界面
                AbilitySlice slice = new MainAbilitySlice2();

                // 初始化传递的 Intent 意图
                Intent intent = new Intent();
                intent.setParam("DATA", 888);

                // 跳转到 MainAbilitySlice2 界面
                present(slice, intent);
            }
        });

    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}

MainAbilitySlice 的 XML 布局文件 :

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:orientation="vertical">

    <Text
        ohos:id="$+id:text"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:background_element="$graphic:background_ability_main"
        ohos:layout_alignment="horizontal_center"
        ohos:text="页面 1"
        ohos:text_size="50"
    />

    <Button
        ohos:id="$+id:button"
        ohos:height="match_parent"
        ohos:width="match_content"
        ohos:layout_alignment="bottom|horizontal_center"
        ohos:text="跳转到 2 页面"
        ohos:text_size="50"
        />

</DirectionalLayout>

MainAbilitySlice2 源码 :

package com.example.harmony.slice;

import com.example.harmony.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.components.Text;

public class MainAbilitySlice2 extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main2);

        // 获取 Text 文字显示组件
        Text text = (Text) findComponentById(ResourceTable.Id_text);

        // 获取 Intent 中的数据 , 并显示到界面中
        text.setText("页面 2 数据 : " + intent.getIntParam("DATA", 0));
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}

MainAbilitySlice2 的 XML 布局文件 :

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:orientation="vertical">

    <Text
        ohos:id="$+id:text"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:background_element="$graphic:background_ability_main"
        ohos:layout_alignment="horizontal_center"
        ohos:text="页面 2"
        ohos:text_size="50"
        />

</DirectionalLayout>




三、运行结果

运行后初始主界面 :

【鸿蒙 HarmonyOS】界面跳转 ( AbilitySlice 之间的界面跳转 | AbilitySlice 之间的值传递 )_AbilitySlice 跳转
点击 " 跳转到 2 页面 " 按钮 ;

【鸿蒙 HarmonyOS】界面跳转 ( AbilitySlice 之间的界面跳转 | AbilitySlice 之间的值传递 )_Ability_02