Android 监听按钮点击事件

本文详细介绍了在Android中通过匿名内部类、独立类、实现OnClickListener接口以及XML属性来实现Button点击事件的优缺点,帮助开发者选择最合适的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实现button点击事件的方法

1、匿名内部类

2、外部类(独立类)

3、实现OnClickListener接口

4、添加XML属性

按钮:

    <ImageButton
        android:id="@+id/scanButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="20dp"
        android:background="#0000"
        android:layout_gravity="center_vertical"
        app:srcCompat="@drawable/ic_scan" />

1、匿名内部类:
优势:
1)不需要重新写一个类,直接在new的时候去实现想实现的方法,很方便。

2)当别的地方都用不到这个方法的时候使用匿名内部类

3)高内聚,高内聚是设计原则之一,匿名内部类的特性之一就是拥有高内聚。

不足:
1)当别的地方也需要同样的一个方法时还要重新再在那个地方写一次匿名内部类,这样使得代码的冗余性很高。

2)不方便后期的维护

public class MainAsnActivity extends AppCompatActivity  {
    private static final String TAG = "test";
    private ImageButton scanButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_asn_activity);
        scanButton = findViewById(R.id.scanButton);
        scanButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d(TAG, "onClick: 按钮被点击");
            }
        });
    }
}

2、独立类(外部类):
优势:
1)一定情况下可以方便维护

2)可以降低代码的冗余性,可以同时使用到多个地方

不足:
1)当只使用一次时浪费资源,程序的性能不高

2)当有很多个方法时代码的可读性不高,此时不方便维护

public class MainAsnActivity extends AppCompatActivity  {
    private static final String TAG = "test";
    private ImageButton scanButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_asn_activity);
        scanButton = findViewById(R.id.scanButton);
        scanButton.setOnClickListener(new scanButtonClick(this));

    }

package com.example.bee.Util;

import android.content.Context;
import android.util.Log;
import android.view.View;

public class scanButtonClick implements View.OnClickListener {
    private static final String TAG = "test";
    private Context context;

    //scanButtonClick方法
    public scanButtonClick(Context ct){
        this.context=ct;
    }
    @Override
    public void onClick(View view) {
        Log.d(TAG, "onClick: 按钮被点击");
    }
}

3、实现OnClickListener接口:
 与独立类实现的原理是一样的,优点和缺陷也是大径相同的,实现OnClickListener接口的时候实现它其中的onClick方法

public class MainAsnActivity extends AppCompatActivity implements View.OnClickListener {
    private static final String TAG = "test";
    private ImageButton scanButton;
    private Button allReceiveButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_asn_activity);
        scanButton = findViewById(R.id.scanButton);
        scanButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        Log.d(TAG, "onClick: 扫描按钮被点击");
    }
}

4、添加XML属性:
优势:更加便捷,代码量能够减少

不足:每一次维护的时候都要去XML里面改源码,维护麻烦

<ImageButton
        android:id="@+id/scanButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="20dp"
        android:background="#0000"
        android:layout_gravity="center_vertical"
        app:srcCompat="@drawable/ic_scan"
        android:onClick="scanBtn"/>

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值