文章目录
一、AbilitySlice 之间的界面跳转
二、完整代码示例
三、运行结果
参考文档 :
Page Ability 基本概念
Page Ability 声明周期
AbilitySlice 间导航
跨设备迁移
一、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); } }