Android监听事件OnClickListener 的使用

Android 监听事件功能,可以实现点击就会完成相应的功能。实现监听事件有4种方法:

  1. 通过内部类实现
  2. 通过匿名内部类实现
  3. 通过当前Activity来实现
  4. 通过xml绑定来实现(使用最多的方法之一)

方法一:通过内部类实现.

首先在btn1上用setOnClickListener()设置一个监听功能。这时需要传进去一个OnClickListener的对象进去。

public void setOnClickListener(@Nullable OnClickListener l) {
        if (!isClickable()) {
            setClickable(true);
        }
        getListenerInfo().mOnClickListener = l;
    }

而OnClickListener是一个接口:

  public interface OnClickListener {
        /**
         * Called when a view has been clicked.
         *
         * @param v The view that was clicked.
         */
        void onClick(View v);
    }

因此需要在MainActivity里面创建一个类MyClickListener 实现OnClickListener的接口,然后将对象到 setOnClickListener中。

 具体实现代码为:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MyClickListener mcl = new MyClickListener();
        Button btn1 = findViewById(R.id.btn1);
        btn1.setOnClickListener(mcl);
    }

    class MyClickListener implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            Log.e("Button1","通过内部类来实现按钮点击监听");
        }
    }

}

 方法二:通过匿名内部类实现:

这个方法和方法一类似,区别在于方法一有明确的类名,而方法二是直接在setOnClickListener()的参数列表中new一个OnClickListener。


btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("Button2","通过匿名内部类来实现按钮点击监听");
            }
        });

方法三:通过当前的activity 类实现接口OnClickListener,并与button绑定。

从方法一种可以看出,实现的方法是新建一个类去实现OnClickListener接口,那么是不是可以在当前的activity类中去实现这个接口,这样就不需要再创建一个新类了。方法三就是这样实现的。由于是这个activity这个类上实现的接口,因此传入的是当前类的对象this。

public class ButtonActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.button_activity);
        
       
        Button btn3= findViewById(R.id.btn3);
        /*
        * 方法3: 通过当前activity 实现OnClickListener接口,然后绑定到指定的button上,
        * this表示当前类的实例化对象
        *
        * */
        btn3.setOnClickListener(this);
    

    @Override
    public void onClick(View v) {
        Log.e("Button3","通过当前activity来实现按钮点击监听");
    }


}

方法四:通过xml布局文件的属性android:onClick来绑定一个onclick函数,当点击这个button的时候就会执行onclick函数。

这个方法是使用最多的方法

实现步骤:

1. 在xml布局文件中增加 android:onClick属性

<Button
        android:id="@+id/btn5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn4"
        android:onClick="myclick"
        />

2.在activity中增加对应的函数myclick

  public void myclick(View v){
        Log.e("Button4","通过xml绑定点击事件");
    }

这个方法是应用最多的方法,但是有一个缺点,如果一个acivity中有很多button,需要绑定很多的click函数,那么就需要创建非常多的click函数,增加了后期代码维护的难度,因此可以才用下面的方式,将所有的button点击事件放在一个click中处理。v.getId会获取点击button的标志位,返回一个int类型的整数。可以根据这个返回值和通过R.id获取到的标志位来比较,然后执行相应的操作。

    public void myclick(View v){
        switch(v.getId()){
            case R.id.btn4 :
                Log.e("Button4","通过xml文件绑定监听");
                break;
            case R.id.btn5:
                Log.e("Button5","通过xml文件绑定监听");
                break;
        }
    }

 

 

strings.xml

<resources>
    <string name="app_name">My Application</string>
    <string name="btn1">通过内部类来实现按钮点击监听</string>
    <string name="btn2">通过匿名内部类来实现按钮点击监听</string>
    <string name="btn3">通过当前activity来实现监听</string>
    <string name="btn4">通过xml绑定点击事件</string>
</resources>

最后是全部四种方法的具体代码实现:

button_activity.xml 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn1"
        />

    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn2"
        />

    <Button
        android:id="@+id/btn3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn3"
        />

    <Button
        android:id="@+id/btn4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn4"
        android:onClick="myclick"
        />

    <Button
        android:id="@+id/btn5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn4"
        android:onClick="myclick"
        />


</LinearLayout>

 

ButtonActivity:

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class ButtonActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.button_activity);
        MyClickListener mcl = new MyClickListener();
        Button btn1 = findViewById(R.id.btn1);
        btn1.setOnClickListener(mcl);
        Button btn2 = findViewById(R.id.btn2);
        Button btn3= findViewById(R.id.btn3);
        Button btn4 = findViewById(R.id.btn4);
        /*
        * 方法3: 通过当前activity 实现OnClickListener接口,然后绑定到指定的button上,
        * this表示当前类的实例化对象
        *
        * */
        btn3.setOnClickListener(this);
    /*方法2: 通过匿名内部类实现按钮点击监听,这个方法中 OnClickListener没有实现接口的类名,是通过new直接实现的
      因此触发的事件只能和这个按钮绑定,不能复用。
     */
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("Button2","通过匿名内部类来实现按钮点击监听");
            }
        });
    }

    @Override
    public void onClick(View v) {
        Log.e("Button3","通过当前activity来实现按钮点击监听");
    }

    //方法1:btn1是通过内部类来实现按钮监听功能
    class MyClickListener implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            Log.e("Button1","通过内部类来实现按钮点击监听");
        }
    }
    /*方法4:通过xml文件中绑定按钮监听,
    *多个按钮绑定的点击监听事件,可以通过一个click函数来实现
     */
    public void myclick(View v){
        switch(v.getId()){
            case R.id.btn4 :
                Log.e("Button4","通过xml文件绑定监听");
                break;
            case R.id.btn5:
                Log.e("Button5","通过xml文件绑定监听");
                break;
        }
    }


}

 

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android Studio是一个流行的开发环境,用于开发Android应用程序。监听事件是用于处理用户交互,例如点击、滑动、触摸等事件。在Android Studio中,可以使用各种监听事件来响应用户的行为,从而在应用程序中执行相应的操作。 以下是一些常用的Android Studio监听事件: 1. 点击事件OnClickListener):当用户点击一个按钮、文本框或其他可点击的元素时触发。 2. 触摸事件(OnTouchListener):当用户在屏幕上移动或按下/释放手指时触发。 3. 滑动事件(OnSwipeListener):当用户滑动屏幕时触发,通常用于切换页面或卡片。 4. 焦点事件(OnFocusChangeListener):当一个控件获得或失去焦点时触发。 5. 菜单事件(OnMenuItemClickListener):当用户在菜单中点击一个菜单项时触发。 6. 计时器事件(TimerTask):使用计时器来定期执行任务,例如更新UI或执行后台任务。 7. 生命周期事件(LifecycleListeners):使用生命周期回调方法来响应应用程序的生命周期变化,例如Activity的创建、销毁和重启。 要使用这些监听事件,可以在相应的控件上设置相应的监听器,或者使用Java或Kotlin中的相应接口和类来实现。在监听事件的处理方法中,可以执行所需的逻辑,例如更新UI、执行网络请求或保存数据。 需要注意的是,监听事件使用取决于具体的需求和场景,因此选择适当的监听事件非常重要。同时,还应该考虑到性能和用户体验的影响,避免过度使用和滥用监听事件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值