【Android的事件处理】-----基于监听的事件处理

本文详细介绍了Android的事件处理,重点讲解了基于监听的机制,包括内部类、外部类、匿名内部类和直接绑定标签等方式。并列举了如OnClickListener等不同类型的事件监听接口,还给出了实战示例。

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


一、知识点

1、定义:为用户动作提供响应的机制就是事件处理。

2、Android提供了两套强大的事件处理机制:

  • 基于监听的事件处理
  • 基于回调的事件处理

3、区别:一般来说,基于回调的事件处理可用于处理一些通用性的事件,基于回调的事件处理代码会比较简洁;但是对于某些特定的事件,无法使用基于回调的事件处  理,只 能采用监听的事件处理。
4、事件监听有如下几个形式:

  • 内部类形式
  • 外部类形式
  • Activity本身作为事件的监听器
  • 匿名内部类
  • 直接绑定标签

5、在基于监听的事件处理模式中,事件监听器必须实现事件监听接口,Android为不同的界面组件提供了不同的监听接口,这些接口通常以内部类的形式存。以View为例,它包含了如下几个内部接口:

  • View.OnClickListener:单击事件的事件监听器必须实现的接口
  • View.OnCreateContextMenuListener:创建上下文菜单事件的事件监听器必须实现的接口
  • View.onFocusChangeListener:焦点改变事件的事件监听器必须实现的接口
  • View.OnKeyListener:按键事件的事件监听器必须实现的接口
  • View.OnLongClickListener:长按事件的事件监听器必须实现的接口
  • View.OnTounchListener:触摸事件的事件监听器必须实现的接口

      

二、实战

例1:

1、效果图


2、demo目录


3、xml文件

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

    <Button
        android:id="@+id/in"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="内部类监听按钮"
        android:textSize="21dp" />

    <Button
        android:id="@+id/ni"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="匿名内部类监听按钮"
        android:textSize="21dp" />

    <Button
        android:id="@+id/out"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="外部类监听按钮"
        android:textSize="21dp" />

    <Button
        android:id="@+id/tip"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="clickTip"
        android:text="绑定标签监听按钮"
        android:textSize="21dp" />

    <Button
        android:id="@+id/myself"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Activity本身监听按钮"
        android:textSize="21dp" />

</LinearLayout>


 
4、外部类代码:
package com.example;

import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class OutOnClickListener implements OnClickListener {
	private Activity MainActivity;

	public OutOnClickListener(Activity MainActivity) {
		this.MainActivity = MainActivity;
	}

	@Override
	public void onClick(View v) {
		Toast.makeText(MainActivity, "外部类按钮", 2000).show();
	}

}


5、主文件代码:
package com.example;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
	Button in, out, ni, tip, myself;//定义按钮

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		initView(); 初始化UI
		NiSetOnClickListener();// 匿名内部类监听
		OutSetOnClickListener();// 外部类监听
		InSetOnClickListeer();// 内部类监听
		myself.setOnClickListener(this);// Activity本身作为事件的监听器
	}

	private void InSetOnClickListeer() {
		in.setOnClickListener(new InClickListener());
	}

	private void OutSetOnClickListener() {
		//直接调用外部类
		out.setOnClickListener(new OutOnClickListener(this));
	}

	private void NiSetOnClickListener() {
		ni.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Toast.makeText(MainActivity.this, "匿名内部类按钮", 2000).show();
			}
		});
	}

	public void clickTip(View v) {
		Toast.makeText(this, "绑定标签按钮", 2000).show();
	}

	private void initView() {
		in = (Button) findViewById(R.id.in);
		out = (Button) findViewById(R.id.out);
		ni = (Button) findViewById(R.id.ni);
		tip = (Button) findViewById(R.id.tip);
		myself = (Button) findViewById(R.id.myself);
	}

	class InClickListener implements OnClickListener {
		@Override
		public void onClick(View v) {
			Toast.makeText(MainActivity.this, "内部类按钮", 2000).show();
		}
	}

	@Override
	public void onClick(View v) {
		Toast.makeText(MainActivity.this, "Activity本身按钮", 2000).show();
	}
}



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值