Android 基于监听的事件处理机制

本文深入解析了事件处理机制,包括事件源、事件和事件监听器的概念,并提供了多种实现监听事件的方法,如内部类、匿名内部类、外部类及布局文件中onClick属性的使用。同时,探讨了给同一事件源添加多个同种类型监听器的情况。

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

当用户在应用界面上执行各种操作时,应用程序需要为用户的动作提供响应,这种响应的过程就是事件处理。

1.监听三要素

Event Source事件源

Event 事件

Event Listener 事件监听器

示例1:

bt2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,ToastActivity.class);
                startActivity(intent);
            }
        });

bt2是事件源,View.OnClickListener()是事件监听器

示例2:

bt2.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                switch(motionEvent.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        break;
                    case MotionEvent.ACTION_UP:
                        break;
                }
                return false;
            }
        });

bt2是事件源,View.OnTouchListener()是事件监听器,MotionEvent motionEvent是发生的事件

 

2.实现监听事件的方法:

1.通过内部类实现

public class EventActivity extends AppCompatActivity {
    Button bt1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);
        bt1=findViewById(R.id.bt_event1);
        //内部类实现
        bt1.setOnClickListener(new onclick());
    }
//定义一个内部类来实现点击
    class onclick implements View.OnClickListener{
        @Override
        public void onClick(View view) {
            switch (view.getId()){
                case R.id.bt_event1:
                    ToastUtil.showMessage(EventActivity.this,"click...");
                    break;
            }
        }
    }
}

2.通过匿名内部类实现

public class EventActivity extends AppCompatActivity{
    Button bt1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);
        bt1=findViewById(R.id.bt_event1);
        //匿名内部类
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ToastUtil.showMessage(EventActivity.this,"click...");
            }
        });
    }
}

3.通过事件源所在类实现

public class EventActivity extends AppCompatActivity implements View.OnClickListener {
    Button bt1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);
        bt1=findViewById(R.id.bt_event1);
        //通过事件源所在类实现
        bt1.setOnClickListener(EventActivity.this);

    }
    public void onClick(View v){
        switch (v.getId()){
            case R.id.bt_event1:
                ToastUtil.showMessage(EventActivity.this,"click...");
                break;
        }
    }
}

//需要注意的是相当于给了一个原生的函数,需要继承view中的onclick方法

4.通过外部类实现

需要在外部定义一个类来引用

创建一个MyclickListener类

package com.example.scrollview;

import android.app.Activity;
import android.view.View;

import com.example.scrollview.util.ToastUtil;

public class MyclickListener implements View.OnClickListener {

    Activity Mactivity;
    public MyclickListener(Activity activity){
        this.Mactivity=activity;
    }
    @Override
    public void onClick(View view) {
        ToastUtil.showMessage(Mactivity,"click...");
    }
}

然后进行引用

public class EventActivity extends AppCompatActivity {
    Button bt1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);
        bt1=findViewById(R.id.bt_event1);
        
        //通过外部类来实现
        bt1.setOnClickListener(new MyclickListener(EventActivity.this));
    }
}

5.布局文件中onClick属性(针对点击事件)

在布局文件中先定义属性

<Button
        android:id="@+id/bt_event1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Click me"
        android:textSize="20sp"
        android:onClick="show"/>

然后在对应的activity中写响应函数

public class EventActivity extends AppCompatActivity{
    Button bt1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);
    }
    //布局文件中onClick属性(针对点击事件)
    public void show(View v){
        switch (v.getId()){
            case R.id.bt_event1:
                ToastUtil.showMessage(EventActivity.this,"click...");
                break;
        }
    }
}

3.提出疑问:给同一个事件源添加多个同种类型监听器会怎么样?

答:系统响应最后一个监听器,在布局中设置的监听器是第一个监听器

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Demo.demo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值