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

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

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

监听的三要素

  • 事件(Event)
  • 事件源(Event Source)
  • 事件监听器(Event Listener)

事件监听器的本质:实现了一个特定接口发的java对象

实现事件监听器的四种方式

1.Activity本身作为事件监听器:通过Activity实现监听器接口,并实现事件处理方法。
2.匿名内部类形式:使用匿名内部类创建监听器对象。
3.内部类或外部类形式:将事件监听类定义为当前类的内部类或普通的类
4.绑定标签:在布局文件种为指定标签绑定事件处理方法

Activity本身作为事件监听器代码

  • 创建事件监听器event_btn.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"
    android:gravity="center_horizontal">
    <EditText
        android:id="@+id/showTxt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:editable="false"/>
    <!-- android:editable="false":不可编辑的-->
    <Button
        android:id="@+id/clickBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="单击我"/>
</LinearLayout>
  • 实现事件监听的接口EventBtnActivity.java
public class EventBtnActivity extends AppCompatActivity
        implements View.OnClickListener {
    //单击按钮
    private Button clickBtn;
    //文字显示
    private TextView showTxt;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.event_btn);
        //初始化组件
        clickBtn = (Button)findViewById(R.id.clickBtn);
        showTxt = (TextView)findViewById(R.id.showTxt);
        //直接使用Activity作为事件监听器
        clickBtn.setOnClickListener(this);
    }
    //在事件处理方法中编写事件处理代码
    @Override
    public void onClick(View v) {
        //实现事件处理方法
        showTxt.setText("BTN被Activtity单击了!!!");
    }
}

  • 效果如图所示:

在这里插入图片描述

缺点:Activity的职责主要是完成界面的初始化工作,在里面实现监听器,容易造成程序的结构混 乱,大多数事件监听只是临时使用一次,所以匿名内部类更为合适

匿名内部类形式

  • 这里的事件监听器还是上面的event_btn.xml,不再次赘述
  • 匿名内部类AnonymousBtnActivity.java
 `public class AnoymousBtnActivity extends AppCompatActivity {
    //单击Button
    private Button clickBtn;
    //文字显示
    private TextView showTxt;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.event_btn);
        //初始化组件
        showTxt = (TextView)findViewById(R.id.showTxt);
        clickBtn = (Button)findViewById(R.id.clickBtn);
        //使用匿名内部类
        clickBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //实现事件处理方法
                showTxt.setText("btn按钮匿名内部类单击了!!!");
            }
        });
    }
}
`
  • 效果:
    在这里插入图片描述

内部类,外部类形式

  • 这里的事件监听器还是上面的event_btn.xml,不再次赘述
  • 内部类InnerClassBtnActivity.java
public class InnerClassBtnActivity extends AppCompatActivity {
    //单击按钮
    private Button clickBtn;
    //显示文字
    private TextView showTxt;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.event_btn);
        //初始化组件
        clickBtn = (Button)findViewById(R.id.clickBtn);
        showTxt = (TextView)findViewById(R.id.showTxt);
        //直接使用Activity作为事件监听器
        clickBtn.setOnClickListener(new ClickListener());
    }
    //内部类方式定义一个事件监听器
    class ClickListener implements View.OnClickListener{
        @Override
        public void onClick(View view) {
            //实现事件处理方法
            showTxt.setText("btn按钮内部类");
        }
    }
}
  • 优点:
    1、可以在当前类中复用内部监听器类
    2、由于监听器是当前类的内部类,所以可以访问当前类的所有界面组件

  • 效果:
    在这里插入图片描述

绑定标签:

Android的绑定标签,在界面布局文件中直接为指定绑定时间的处理放法。对于大多数Android界面的组件而言,基本都支持onClick事件的属性,相应的属性就是一个在。java文件中定义的一个事件处理方法

  • event_tag.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"
    android:gravity="center_horizontal">
    <EditText
        android:id="@+id/showTxt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:editable="false" />
    <Button
        android:id="@+id/clickBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ***android:onClick="clickMe"***
        android:text="单击我"/>
</LinearLayout>
  • BindTagActivity.java:事件处理方法
public class event_tagActivity extends AppCompatActivity {
    //单击Button
    private Button clickBtn;
    //显示文本
    private TextView showTxt;
    //

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.event_tag);
        //初始化组件
        clickBtn = (Button)findViewById(R.id.clickBtn);
        showTxt = (TextView)findViewById(R.id.showTxt);
    }
    public void clickMe(View v){
        //实现事件处理方法
        showTxt.setText("btn按钮标签单击了!!!");
    }
}
  • 效果:
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45193294/article/details/115013997