当前位置:   article > 正文

❤️HarmonyOS(鸿蒙)❤️——单击事件的四种写法详述_button.setclickedlistener(component -> { i++; text

button.setclickedlistener(component -> { i++; text.settext(""+i);

目录

一、简介

二、定义实现类

三、当前类作为实现类

四、匿名内部类

五、方法引用

六、HarmonyOS(鸿蒙)全面学习-精选好文汇总


一、简介

HarmonyOS(鸿蒙)开发过程中,使用到的最多的事件就是单击事件,单击事件一共有四种写法,它们有一些细微的区别和场景。

四种写法如下:

  1. 定义实现类
  2. 当前类作为实现类
  3. 匿名内部类
  4. 方法引用

二、定义实现类

定义实现类ClickedListener实现Component.ClickedListener接口并且重写onClick方法

  1. /**
  2.  * 实现ClickedListener接口并重写onClick方法
  3.  */
  4. class ClickedListener implements Component.ClickedListener {
  5.     /**
  6.      * 点击事件触发的操作会调用的方法
  7.      * @param component     被点击的组件对象
  8.      */
  9.     @Override
  10.     public void onClick(Component component) {
  11.         // 具体点击操作的逻辑处理
  12.         Button button = (Button) component;
  13.         button.setText("哦,我被点击了!");
  14.     }
  15. }

在MainAbilitySlice中通过控件的setClickedListener方法传入Component.ClickedListener接口的实现类ClickedListener

  1. public class MainAbilitySlice extends AbilitySlice {
  2.     @Override
  3.     public void onStart(Intent intent) {
  4.         super.onStart(intent);
  5.         super.setUIContent(ResourceTable.Layout_ability_main);
  6.         //1. 找到组件
  7.         Button button = (Buttonthis.findComponentById(ResourceTable.Id_button);
  8.         //2. 绑定单击事件
  9.         button.setClickedListener(new ClickedListener());
  10.     }
  11.     @Override
  12.     public void onActive() {
  13.         super.onActive();
  14.     }
  15.     @Override
  16.     public void onForeground(Intent intent) {
  17.         super.onForeground(intent);
  18.     }
  19. }

三、当前类作为实现类

直接使用当前类MainAbilitySlice作为Component.ClickedListener接口的实现类,这个与上面的区别在于,我们不需要单独定义一个实现类,同时可以在onClick方法中共享MainAbilitySlice的定义的相关变量

  1. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
  2.     @Override
  3.     public void onStart(Intent intent) {
  4.         super.onStart(intent);
  5.         super.setUIContent(ResourceTable.Layout_ability_main);
  6.         //1. 找到组件
  7.         Button button = (Buttonthis.findComponentById(ResourceTable.Id_button);
  8.         //2. 绑定单击事件
  9.         button.setClickedListener(this);
  10.     }
  11.     @Override
  12.     public void onActive() {
  13.         super.onActive();
  14.     }
  15.     @Override
  16.     public void onForeground(Intent intent) {
  17.         super.onForeground(intent);
  18.     }
  19.     @Override
  20.     public void onClick(Component component) {
  21.         // 具体点击操作的逻辑处理
  22.         Button button = (Button) component;
  23.         button.setText("哦,我被点击了!");
  24.     }
  25. }

四、匿名内部类

直接setClickedListener方法中传入匿名内部类,new Component.ClickedListener() {},这样做的坏处在于代码不可重复使用,并且如果这样的写法过多,会导致代码可读性降低

  1. public class MainAbilitySlice extends AbilitySlice {
  2.     @Override
  3.     public void onStart(Intent intent) {
  4.         super.onStart(intent);
  5.         super.setUIContent(ResourceTable.Layout_ability_main);
  6.         //1. 找到组件
  7.         Button button = (Buttonthis.findComponentById(ResourceTable.Id_button);
  8.         //2. 绑定单击事件
  9.         button.setClickedListener(new Component.ClickedListener() {
  10.             @Override
  11.             public void onClick(Component component) {
  12.                 // 具体点击操作的逻辑处理
  13.                 Button button = (Button) component;
  14.                 button.setText("哦,我被点击了!");
  15.             }
  16.         });
  17.         /*
  18.          * lambda写法
  19.          button.setClickedListener(component -> {
  20.             // 具体点击操作的逻辑处理
  21.             Button button1 = (Button) component;
  22.             button1.setText("哦,我被点击了!");
  23.         });
  24.         */
  25.     }
  26.     @Override
  27.     public void onActive() {
  28.         super.onActive();
  29.     }
  30.     @Override
  31.     public void onForeground(Intent intent) {
  32.         super.onForeground(intent);
  33.     }
  34. }

五、方法引用

这种写法,无需新增类,MainAbilitySlice类也无需实现Component.ClickedListener接口,而是通过手动写一个同名、同参数的onClick方法,通过方法引用的方式来实现 button.setClickedListener(this::onClick);

  1. public class MainAbilitySlice extends AbilitySlice {
  2.     @Override
  3.     public void onStart(Intent intent) {
  4.         super.onStart(intent);
  5.         super.setUIContent(ResourceTable.Layout_ability_main);
  6.         //1. 找到组件
  7.         Button button = (Buttonthis.findComponentById(ResourceTable.Id_button);
  8.         //2. 绑定单击事件
  9.         button.setClickedListener(this::onClick);
  10.     }
  11.     @Override
  12.     public void onActive() {
  13.         super.onActive();
  14.     }
  15.     @Override
  16.     public void onForeground(Intent intent) {
  17.         super.onForeground(intent);
  18.     }
  19.     public void onClick(Component component) {
  20.         // 具体点击操作的逻辑处理
  21.         Button button = (Button) component;
  22.         button.setText("哦,我被点击了!");
  23.     }
  24. }

六、HarmonyOS(鸿蒙)全面学习-精选好文汇总

HarmonyOS(鸿蒙)DevEco Studio开发环境搭建

HarmonyOS(鸿蒙)开发一文入门

两个案例五分钟轻松入门Harmony(鸿蒙)开发

HarmonyOS与Android的全面对比

HarmonyOS(鸿蒙)全网最全资源汇总,吐血整理,赶紧收藏!

HarmonyOS(鸿蒙)—— Ability与页面

HarmonyOS(鸿蒙)——config.json详解

HarmonyOS(鸿蒙)——启动流程

HarmonyOS(鸿蒙)——全面入门,始于而不止于HelloWorld

 HarmonyOS(鸿蒙)——单击事件

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/350246
推荐阅读
相关标签
  

闽ICP备14008679号