参考文档 :
一、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>
三、运行结果
运行后初始主界面 :
点击 " 跳转到 2 页面 " 按钮 ;