(3.1)HarmonyOS鸿蒙单击事件4种写法

第二种和第四种常用

实现步骤:
1.通过id找到组件。
2.给需要的组件设置单击事件。
3.实现ClickedListener接口。
4.重写onClicked方法。


第一种,自定义实现类(在当前类外面写实现类)

①MainAbilitySlice.java文件

package com.example.yeman.slice;

import com.example.yeman.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;

public class MainAbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        //找到按钮。
        // 说明:findComponentById返回的是父类对象所有组件,因此需要(Button)强转。
        Button but = (Button) findComponentById(ResourceTable.Id_but);
        //给按钮绑定一个点击事件
        but.setClickedListener(new MyListenner());
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}

//第一种,自定义实现类
class MyListenner implements Component.ClickedListener{
    @Override
    public void onClick(Component component) {
        //component所有组件的父类
        //参数是被点击的组件
        Button btn = (Button)component;
        btn.setText("第1种被点");

    }
}

②ability_main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:alignment="center"
    ohos:orientation="vertical">

    <Button
        ohos:id="$+id:but"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:background_element="blue"
        ohos:text="请点击我"
        ohos:text_size="150"/>

</DirectionalLayout>

第二种,当前类作为实现类(在当前类引入)
比第一种好在可以改变其他组件,如代码中,点击按钮,修改文本组件文本内容。

①MainAbilitySlice.java文件

package com.example.yeman.slice;

import com.example.yeman.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 implements Component.ClickedListener{
    Text txt;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        //找到按钮。
        // 说明:findComponentById返回的是父类对象所有组件,因此需要(Button)强转。
        Button but = (Button) findComponentById(ResourceTable.Id_but);
        //找到文本框组件
        txt = (Text) findComponentById(ResourceTable.Id_txt);
        //给按钮绑定一个点击事件
        but.setClickedListener(this);
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }

    //第二种,当前实现类
    @Override
    public void onClick(Component component) {
        //component所有组件的父类
        //参数是被点击的组件
        txt.setText("你点击了按钮");
    }
}

②ability_main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:alignment="center"
    ohos:orientation="vertical">

    <Text
        ohos:id="$+id:txt"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:text="这是文本组件"
        ohos:text_size="100"/>
    <Button
        ohos:id="$+id:but"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:background_element="blue"
        ohos:text="请点击我"
        ohos:text_size="150"/>

</DirectionalLayout>

第三种,匿名内部类(只能用一次)

①MainAbilitySlice.java文件

package com.example.yeman.slice;

import com.example.yeman.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 {
    Text txt;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        //找到按钮。
        // 说明:findComponentById返回的是父类对象所有组件,因此需要(Button)强转。
        Button but = (Button) findComponentById(ResourceTable.Id_but);
        //找到文本框组件
        txt = (Text) findComponentById(ResourceTable.Id_txt);
        //给按钮绑定一个点击事件
        but.setClickedListener(new Component.ClickedListener() { //第三种,匿名内部类
            @Override
            public void onClick(Component component) {
                //component所有组件的父类
                //参数是被点击的组件
                txt.setText("你点击了按钮");
            }
        });
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }

}

②ability_main.xml文件同第二种


第四种,引用方法

①MainAbilitySlice.java文件

package com.example.yeman.slice;

import com.example.yeman.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 {
    Text txt;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        //找到按钮。
        // 说明:findComponentById返回的是父类对象所有组件,因此需要(Button)强转。
        Button but = (Button) findComponentById(ResourceTable.Id_but);
        //找到文本框组件
        txt = (Text) findComponentById(ResourceTable.Id_txt);
        //给按钮绑定一个点击事件
        but.setClickedListener(this::onClick);
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }

    //第四种,引用方法
    public void onClick(Component component) {
        //component所有组件的父类
        //参数是被点击的组件
        txt.setText("你点击了按钮");
    }
}

②ability_main.xml文件同第二种

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶绿体不忘呼吸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值