HarmonyOS App开发之组件布局类(优化篇)

今天继续分享学习 HarmonyOS 系统,今天的分享将在HarmonyOS  App开发之组件布局类的基础上,针对核心的代码进行一次优化。

首先,来看一看 HarmonyOS  App开发之组件布局类
的核心处理逻辑代码(备注不同布局的相似代码忽略掉):

 1@Override
 2public void onStart(Intent intent) {
 3    super.onStart(intent);
 4    super.setUIContent(ResourceTable.Layout_ability_main); // 这里实际上是要去加载ability_main.xml 布局文件,这里在前面加上一个Layout_ 是系统要求这样做的,表明这是一个布局文件,布局文件详情在下面有详细列出。
 5Button btn_directional = (Button) findComponentById(ResourceTable.Id_directional_layout); // 这里实际上是在从ability_main.xml 文件中找id 为 directional_layout的元素,并强转为Button类型
 6        if(btn_directional != null){ // 判断非null 
 7            btn_directional.setClickedListener(new Component.ClickedListener() { //给此id 元素设置监听事件
 8                @Override
 9                public void onClick(Component component) {
10                    present(new DirectionalLayoutSlice(),new Intent()); // 当此id元素被点击时,就去渲染DirectionalLayoutSlice这个类对象,这里的Present()是用来实现不同的page(ability)内的跳转。
11                }
12            });
13        }
14}

然后,来看一看优化后的代码,优化后的代码实际理解进来比之前较难懂一些,但是这种优化后的代码可以更好的处理页面元素有点击事件时的场景。

 1   @Override
 2    public void onStart(Intent intent) {
 3        super.onStart(intent);
 4        super.setUIContent(ResourceTable.Layout_ability_main);
 5        setClickedListeners(this, // 调用下面的setClickedListeners()方法,可以接收多个components参数。
 6                findComponentById(ResourceTable.Id_directional_layout),
 7                findComponentById(ResourceTable.Id_dependent_layout),
 8                findComponentById(ResourceTable.Id_stack_layout),
 9                findComponentById(ResourceTable.Id_table_layout)
10        );
11}
12
13private void setClickedListeners(Component.ClickedListener clickListener, Component...components) { //设置点击事件
14    for (Component component : components) {
15        if (component == null) {
16            continue;
17        }
18        component.setClickedListener(clickListener); // 这里是在触发直接点击后的onClick()方法,方法体如下所示:
19    }
20}
21
22@Override
23public void onClick(Component component) {
24    String className = "";
25    switch (component.getId()) { // 根据不同的组件ID来设置className 变量
26        case ResourceTable.Id_dependent_layout:
27            className = "com.huawei.codelab.slice.DependentLayoutSlice";
28            break;
29        case ResourceTable.Id_directional_layout:
30            className = "com.huawei.codelab.slice.DirectionalLayoutSlice";
31            break;
32        case ResourceTable.Id_stack_layout:
33            className = "com.huawei.codelab.slice.StackLayoutSlice";
34            break;
35        case ResourceTable.Id_table_layout:
36            className = "com.huawei.codelab.slice.TableLayoutSlice";
37            break;
38        default:
39            break;
40    }
41    abilitySliceJump(className); //通过abilitySliceJump()方法传入不同的className来进行页面的跳转。
42}
43
44private void abilitySliceJump(String name) {
45    if (name == null || "".equals(name)) {
46        return;
47    }
48    try {
49        Class abilitySliceClass = Class.forName(name);
50        Object object = abilitySliceClass.newInstance();
51        if (object instanceof AbilitySlice) {
52            present((AbilitySlice) object, new Intent());
53        }
54    } catch (ReflectiveOperationException e) {
55        new ToastDialog(getContext()).setText("This is an Error!").show(); // 这里还引入了Toast提示框,它弹出一个小信息,作为提醒或消息反馈来用,一般用来显示操作结果,或者应用状态的改变。
56    }
57}

最后,再来验证一下是否运行正常,运行结果如下所示:

HarmonyOS App开发之组件布局类(优化篇)

 

 

小结:

这里就不再展示每一个布局组件了,通过优化后我们的布局组件能够正常跳转页面,这样在后面如果我们要添加新的元素进来,只需要做简单的代码改动即可,不用再像HarmonyOS App开发之组件布局类那样重复性的编写类似的代码。

欢迎关注【无量测试之道】公众号,回复【领取资源】
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。

备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

HarmonyOS App开发之组件布局类(优化篇)

添加关注,让我们一起共同成长!

上一篇:Android 获取服务是否在后台 & 获取TopActivity


下一篇:mybatis-plus快速入门