天天看點

❤️HarmonyOS(鴻蒙)❤️——單擊事件的四種寫法詳述

目錄

一、簡介

二、定義實作類

三、目前類作為實作類

四、匿名内部類

五、方法引用

六、HarmonyOS(鴻蒙)全面學習-精選好文彙總

HarmonyOS(鴻蒙)開發過程中,使用到的最多的事件就是單擊事件,單擊事件一共有四種寫法,它們有一些細微的差別和場景。

四種寫法如下:

定義實作類

目前類作為實作類

匿名内部類

方法引用

定義實作類ClickedListener實作Component.ClickedListener接口并且重寫onClick方法

❤️HarmonyOS(鴻蒙)❤️——單擊事件的四種寫法詳述

直接使用目前類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("哦,我被點選了!");
    }
}      

HarmonyOS(鴻蒙)DevEco Studio開發環境搭建

HarmonyOS(鴻蒙)開發一文入門

兩個案例五分鐘輕松入門Harmony(鴻蒙)開發

HarmonyOS與Android的全面對比

HarmonyOS(鴻蒙)全網最全資源彙總,吐血整理,趕緊收藏!

HarmonyOS(鴻蒙)—— Ability與頁面

HarmonyOS(鴻蒙)——config.json詳解

HarmonyOS(鴻蒙)——啟動流程

HarmonyOS(鴻蒙)——全面入門,始于而不止于HelloWorld

HarmonyOS(鴻蒙)——單擊事件

繼續閱讀