在 Android 的图形界面(UI)开发中,有两个非常重要的内容∶一个是控件的布局,另个就是控件的事件处理。Android中的常用事件有点击事件、长按事件、触摸事件、焦点事件、按键事件—下拉列表的选中事件、单选按钮的改变事性等。对于事件的处理,基本上可以总结为 3 个步骤∶
步骤一: 获取触发事件的对象,比如点击了一个 Button,如果要对这个点击事件进行处理,就需要获取 Button 的对象。
步骤二:实现一个对应的事件处理接口。每个事件都有对应的事件处理接口,在事件处理中必须要实现事件处理接口,同时要实现其中的事件处理方法。在一个事件处理接口的实现类中可以处理多个事件。
步骤三: 用获取的控件对象调用该控件的某个事件监听方法,将第二步实现的接口类的对象作为参数传入,并对该事件进行注册。
点击事件
点击事件,顾名思义就是点击了某个控件而触发的事件。点击事件常见于 Button 按钮,当然,TextView、ImageView 等控件中也有使用。另外,布局管理器(如LinearLayout等)也是可以有点击事件的、下面将以 Button与TextView 为实例来进行讲解。
Activity 对应的布局文件代码∶
xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/button_click"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击button按钮"/>
<TextView
android:id="@+id/text_click"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击textView"/>
LinearLayout>
MainActivity中处理的代码:
就像前面所说的分3步来处理事件∶第一步使用 findViewByld()方法获取 Button 按钮的对象;第二步让 Activity 实现点击事件的处理接口 View.OnClickListener,并实现 onClickO)方法,在此方法中响应具体的点击事件;第三步调用 setOnClickListener()点击事件的监听方法,并将 View.OnClickListener 接口实现类的对象传入(实例中是用 Activity 实现的,所以传入了 this对象)。
对点击事件的处理都是要在 onClick()方法中进行编写的,实例在点击之后弹出一个 Toast进行提示。如果只有一个点击事件,就可以直接在方法内编写响应程序,但是当实例中有两个(或多个)需要进行处理的点击事件时则需要使用一个 switch 根据它们的 id 进行判断。在第三步调用 setOnClickListener()方法时,系统会对 View 进行注册,所以在 onClick()方法中可以从 view.getId()方法获取对应的 View 控件的 id。
运行程序,点击 Button 按钮的效果如下图所示:
点击Button按钮效果图 点击TextView按钮效果图
其实,在处理点击事件时,实现事件处理接口的方式有 3 种,实例中的处理方式是在实际开发中最常用的。下面简单介绍其他两种方式。
(1)匿名内部类的方式
直接在控件对象调用 setOnClickListener(O方法时以匿名内部类的方式传入事件处理接口的对象。修改MainActivity的代码如下:
使用这种方式就需要在Button按钮和TextView中都这样处理。如果不是两个,同时需要的点击事件特别多,就会使得代码冗余,让 initView()方法过于庞大,同时可读性降低。选择使用实例中的方法就会显得很清晰,同时代码简洁、可读。当然,如果需要处理的事件只有一个或者几个的话,使用此种方式会相当简单。只是在真正的开发中只有一个事件需要处理的情况相对较少,所以实例中的处理方式才是应用最广泛的。
(2)内部类的方式
这种方式和匿名内部类方式不同的是,它选择在 Activity 内部创建一个内部类,并在内部类内实现 onClick(View view)方法。修改MainActivity代码如下:
使用这种方式,和实例中的方式并无区别,只是一个用 Activity 实现了事件处理接口,一个使用了内部类的方式。当然,也可以用普通类的方式,和内部类效果一样,但是在代码的内聚性上会大打折扣。当然如果遇到的工程相对复杂,那么为了解耦有时也会使用普通类的方式,不过非常少见。
只有理解了上面 3 种实现事件处理接口的方式,在开发中才能根据需要选择不同的方式。其实,不只是点击事件,其他事件实现事件处理接口也是同样的。
源码下载请关注大鸟科创空间,回复andriod studio进行下载
作者: 大鸟科创空间, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3949041.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
curton 2021-4-26 16:17
您的回复很重要
https://mbb.eet-china.com/forum/topic/88879_1_1.html