写点什么

HarmonyOS(鸿蒙)——单击事件的四种写法

作者:李子捌
  • 2021 年 12 月 25 日
  • 本文字数:2287 字

    阅读完需:约 8 分钟

HarmonyOS(鸿蒙)——单击事件的四种写法

一、简介

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


四种写法如下:


  1. 定义实现类

  2. 当前类作为实现类

  3. 匿名内部类

  4. 方法引用

二、定义实现类

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


/** * 实现ClickedListener接口并重写onClick方法 */class ClickedListener implements Component.ClickedListener {
/** * 点击事件触发的操作会调用的方法 * @param component 被点击的组件对象 */ @Override public void onClick(Component component) { // 具体点击操作的逻辑处理 Button button = (Button) component; button.setText("哦,我被点击了!"); }}
复制代码


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


public class MainAbilitySlice extends AbilitySlice {    @Override    public void onStart(Intent intent) {        super.onStart(intent);        super.setUIContent(ResourceTable.Layout_ability_main);
//1. 找到组件 Button button = (Button) this.findComponentById(ResourceTable.Id_button);
//2. 绑定单击事件 button.setClickedListener(new ClickedListener()); }
@Override public void onActive() { super.onActive(); }
@Override public void onForeground(Intent intent) { super.onForeground(intent); }}
复制代码

三、当前类作为实现类

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


public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {    @Override    public void onStart(Intent intent) {        super.onStart(intent);        super.setUIContent(ResourceTable.Layout_ability_main);
//1. 找到组件 Button button = (Button) this.findComponentById(ResourceTable.Id_button);
//2. 绑定单击事件 button.setClickedListener(this); }
@Override public void onActive() { super.onActive(); }
@Override public void onForeground(Intent intent) { super.onForeground(intent); }
@Override public void onClick(Component component) { // 具体点击操作的逻辑处理 Button button = (Button) component; button.setText("哦,我被点击了!"); }}
复制代码

四、匿名内部类

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


public class MainAbilitySlice extends AbilitySlice {    @Override    public void onStart(Intent intent) {        super.onStart(intent);        super.setUIContent(ResourceTable.Layout_ability_main);
//1. 找到组件 Button button = (Button) this.findComponentById(ResourceTable.Id_button);
//2. 绑定单击事件 button.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { // 具体点击操作的逻辑处理 Button button = (Button) component; button.setText("哦,我被点击了!"); } }); /* * lambda写法 button.setClickedListener(component -> { // 具体点击操作的逻辑处理 Button button1 = (Button) component; button1.setText("哦,我被点击了!"); }); */ }
@Override public void onActive() { super.onActive(); }
@Override public void onForeground(Intent intent) { super.onForeground(intent); } }
复制代码

五、方法引用

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


public class MainAbilitySlice extends AbilitySlice {    @Override    public void onStart(Intent intent) {        super.onStart(intent);        super.setUIContent(ResourceTable.Layout_ability_main);
//1. 找到组件 Button button = (Button) this.findComponentById(ResourceTable.Id_button);
//2. 绑定单击事件 button.setClickedListener(this::onClick); }
@Override public void onActive() { super.onActive(); }
@Override public void onForeground(Intent intent) { super.onForeground(intent); }
public void onClick(Component component) { // 具体点击操作的逻辑处理 Button button = (Button) component; button.setText("哦,我被点击了!"); }}
复制代码


发布于: 1 小时前
用户头像

李子捌

关注

华为云享专家 2020.07.20 加入

公众号【李子捌】

评论

发布
暂无评论
HarmonyOS(鸿蒙)——单击事件的四种写法