实现监听事件常用的五种方式

本文详细介绍了监听事件的概念及其三个核心要素:事件源、事件和事件监听器,并提供了五种常见的监听事件实现方法,包括内部类、匿名内部类、外部类、事件源所在类及onClick属性。

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

什么是监听事件?

监听事件就是等待某个事件的发生,当这个事件发生之后,对其做出一个响应。如:鼠标单击一个按钮,单击按钮时打开一个新的页面,或者双击桌面的应用图标,运行一个程序,这都是监听事件的应用。

监听三要素

  1. Event Source(事件源):监听的目标,假如我们给Button设置一个点击事件,那么Button就为事件源
  2. Event(事件):发生的事件,不同的事件需要相应的事件监听器进行处理,点击、触摸、按下等都是事件
  3. Event Listener(事件监听器):不同的事件监听器处理不同的监听事件

实例:

实例需求:

新建一个项目,在布局中添加一个按钮,给按钮设置监听事件,点击按钮,弹出一段提示文字(文字自定义)

需求分析:

1、添加按钮

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Click Me" 
        android:textAllCaps="false"/>

2、设置监听事件

实例中是给Button设置一个点击事件,所以通过.setOnClickListener( )方法来进行设置,在设置之前我们要先创建事件,实现监听事件方法有很多,主要有以下五种:

2.1通过内部类实现:

找到声明控件,再编写一个内部类OnClick实现View.OnClickListener接口,为了提高代码的复用性,在该类中添加一个switch判断语句,通过view.getId( )方法获取到控件的id,根据id执行相应控件的监听事件,在监听事件中使用Toast弹出提示信息,创建好事件后,需要新建一个事件对象,再通过.setOnClickListener( )方法给Button添加该事件,如下:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button mButton = findViewById(R.id.btn);
        OnClick onClick = new OnClick();
        mButton.setOnClickListener(onClick);
    }

    class OnClick implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.btn:
                    Toast.makeText(MainActivity.this, "通过内部类实现", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }
}

实例演示

2.2通过匿名内部类实现

匿名内部类实现监听事件时这几种方法中最简单,代码量最少的实现方式,该类方法也是通过.setOnClickListener( )方法设置,在该方法中直接创建一个系统提供的View.OnClickListener( )对象,在该对象中编写监听事件,代码如下:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button mButton = findViewById(R.id.btn);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "匿名内部类实现", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

 实例演示

2.3外部类实现

创建一个类,实现View.OnClickListener接口,在该类中定义一个Activity类型的实例mActivity(因为这是一个公共类,所以可能在不同的Activity中被调用,使用mActivity接收调用的Activity,在监听事件中的Toast语句中传入Activity),在构造方法中传入,再重写onClick( )方法,在该方法中添加switch提高方法的复用性,在监听事件中使用Toast语句弹出提示信息。代码如下:

public class MyClick implements View.OnClickListener {
    private Activity mActivity;
//创建一个构造方法,传入参数Activity
    public MyClick(Activity activity) {
        this.mActivity = activity;
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn:
                Toast.makeText(mActivity, "外部类实现", Toast.LENGTH_LONG).show();
                break;
        }
    }
}
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button mButton = findViewById(R.id.btn);
        mButton.setOnClickListener(new MyClick(MainActivity.this));
    }
}

实例演示

2.4通过事件源所在类实现

这个实例中,我们是给Button设置点击事件,所以事件源就为Button,而Button所在类为MainActivity,所以通过事件源所在类实现,只需要给MainActivity实现View.OnClickListener接口,在MainActivity中重写View.OnClickListener的onClick( )方法,如下:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button mButton = findViewById(R.id.btn);
        mButton.setOnClickListener(MainActivity.this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn:
                Toast.makeText(this, "事件所在类实现", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

实例演示

2.5通过onClick属性实现

在Button控件中有一个"onClick"属性,是用于给Button控件设置监听事件,创建一个监听事件作为属性值传入,代码如下:

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Click Me"
        android:onClick="show"
        android:textAllCaps="false"/>
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void show(View view){
        switch (view.getId()){
            case R.id.btn:
            Toast.makeText(this, "onClick属性实现", Toast.LENGTH_SHORT).show();
        }
    }
}

实例演示

总结:

  1. 监听三要素:Event Source(事件源)、Event(事件)、Event Listener(事件监听器)
  2. 常用的五种监听方式的实现方式 :内部类、匿名内部类、外部类、事件源所在类、onClick属性
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值