一、引言

在经过几天的学习之后, 首先熟悉了几大基本布局以及一些常用控件的使用方法,目前正在学习如何实现一个基本的登录注册界面及其功能,而实现功能就需要我们采用事件处理机制来进行调用事件处理方法。以下,就是我总结的一些事件处理机制。

二、常用监听接口

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

三、基于监听的事件处理机制

(一)首先,事件监听机制中由事件源,事件,事件监听器三类对象组成。

事件监听器处理流程:

  1. 为事件源(例如:button)设置一个监听器,用于监听用户的操作(点击操作等)
  2. 用户做出的操作触发事件源的监听器
  3. 自动生成对应的事件对象
  4. 将事件源对象作为参数传给事件监听器
  5. 事件监听器对事件对象进行判断,执行对应的事件处理器(处理方法)

(二)五种不同使用方式:

以给按钮添加点击生成Toast信息事件为例

1.用匿名内部类

该方法是最为常用的方法,但是复用性不高

 Button bt1=(Button)findViewById(R.id.bt1);

         bt1.setOnclickListener(new View.OnClickListener(){

 //重写点击事件的处理方法onClick()

 @Override

 public void onClick(View v){

         //显示Toast信息

         Toast.makeText(getApplicationContext(),”点击按钮”,Toast.LENGTH_SHORT).show();

         }

 }

2.使用内部类

和上面的匿名内部类不同,其优点是在该类中可以进行复用,可直接访问外部类的所有界面组件。

 public class MainActivity extends Activity {

     private Button bt1;

     @Override

     protected void onCreate(Bundle savedInstanceState) {

         Super.onCreate(saveInstanceState);

         SetContentView(R.layout.activity);

         Bt1 = (Button) findViewById(R.id.bt1);

         //直接new一个内部类对象作为参数

         Bt1.setOnClickListener(new BtnClickListener());

     }

 //定义一个内部类,实现View.OnClickListener接口,并重写onClick()方法

     Class BtnClickListener implements View.OnClickListener

     {

         @Override

         Public void onClick (View v){

         Toast.makeText(getApplicationContext(),”点击按钮”, Toast.LENGTH_SHORT).show();

     }

     }

 }

3.使用外部类

另外创建一个处理时间的Java文件,这种形式用的比较少,因为外部类不能直接访问用户界面类中的组件,要通过构造方法将组件传入使用,这昂导致的结果就是代码不够简洁。

创建一个外部类:

 public class Myclick implements View.OnClickListener{
private TextView textView;
//把文本框作为参数传入
public Myclick(TextView v){
textView = v;
}
@Override
public void onClick(View v){
//点击按钮后重设文本框的文字
textView.setText("已点击按钮");
}
}

MainActivity.java:

 public class MainActivity extends Activity{
private Button btn1;
private TextView tv1;
@Override
protected void onCreate(Bundle savadInstanceState){
super.onCreate(savadInstanceState);
setContentView(R.layout.activty_main);
btn1 = (Button) findViewById(R.id.btn1);
tv1 = (TextView) findViewById(R.id.tv1);
//new一个外部类,并把TEXTVIEW作为参数传入
btn1.setOnClickListener(new Myclick(tv1));
}
}

4.直接使用Activity作为事件监听器

让Actiity类实现XxxListener事件监听接口,在Activity中定义重写对应的时间处理器方法。

eg:Activity类实现了OnClickListener接口,重写了OnClick(View v)方法在为某些组件添加事件监听对象时,直接setXxx.Listener(this)即可

 import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; public class MainActivity extends Activity implements View.OnClickListener{
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layou.activity_main); btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(this); } //重写接口中的抽象方法
@Override
public void onClck(View v){
Toast.makeText(getApplicationContext(),"点击了按钮",Toast.LENGTH_SHORT).show();
}
}

5.直接绑定标签

在xml布局文件中对应的Activity中定义一个事件处理方法

eg:public void myClick(View source)

source对应事件源(组件)接着布局文件中对应要触发事件的组件,设置一个属性: onclick="myclick"即可

MainActivity.java

 public class MainActivity extends Activity{
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layou.activity_main); } //自定义一个方法,传入一个view组件作为参数
public void myclick(View source){
Toast.makeText(getApplicationContext(),"点击按钮",Toast.LENGTH_SHORT).show();
} }

main.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"> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮"
android:onClick="myclick"/> </LinearLayout>

四、总结

在我们使用中,会根据不同的情况,而选择不同的方法去对事件进行处理。

方法1(匿名),一般用于给特定组件的特定业务响应

方法2和方法3(内部类与外部类),可以同时为多个UI共同的事件处理,适用于对个UI组件复用,但当事件源要传递信息给事件监听器时则不太灵活,必须通过成员变量及构造方法

方法4(activity本身作为监听器),是我们日常业务中应用最多的一种方法。

方法5(xml标签),通过设置UI组件的android:onClick属性,然后通过代码实现方法,这种方式因为业务逻辑和UI耦合性太高,实际业务中一般不用

Android_基于监听的事件处理机制的更多相关文章

  1. Android的事件处理机制详解(二)-----基于监听的事件处理机制

    基于监听的事件处理机制 前言: 我们开发的app更多的时候是需要与用户的交互----即对用户的操作进行响应 这就涉及到了android的事件处理机制; android给我们提供了两套功能强大的处理机制 ...

  2. Android基础新手教程——3.1 基于监听的事件处理机制

    Android基础新手教程--3.1.1 基于监听的事件处理机制 标签(空格分隔): Android基础新手教程 本节引言: 第二章我们学习的是Android的UI控件,我们能够利用这些控件构成一个精 ...

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

    无论是桌面应用还是手机应用程序,面对用户的使用,经常需要处理的便是用户的各种动作,也就是需要为用户动作提供响应,这种为用户动作提供响应的机制就是事件处理. 而Android为我们提供了两套强大的响应机 ...

  4. Android零基础入门第34节:Android中基于监听的事件处理

    原文:Android零基础入门第34节:Android中基于监听的事件处理 上一期我们学习了Android中的事件处理,也详细学习了Android中基于监听的事件处理,同时学会了匿名内部类形式,那么本 ...

  5. Android开发之基于监听的事件处理

    在Android 应用开发过程中,常用监听事件如下:(1) ListView事件监听setOn ItemSelectedListener:鼠标滚动时触发setOnItemClickListener: ...

  6. Android学习笔记基于监听的事件处理

    事件处理流程 代码格式: Button btn1 = findViewById(R.id.btn1); btn1.setOnClickListener(new View.OnClickListener ...

  7. 基于监听的事件处理——Activity本身作为事件监听器

    这种形式使用Activity本身作为监听器类,可以直接在Activity类中定义事件处理方法,这种形式非常简洁.但这种做法有两个缺点: 这种形式可能造成程序结构混乱,Activity的主要职责应该是完 ...

  8. android事件处理之基于监听

    Android提供了了两种事件处理方式:基于回调和基于监听. 基于监听: 监听涉及事件源,事件,事件监听器.用注册监听器的方法将某个监听器注册到事件源上,就可以对发生在事件源上的时间进行监听. 最简单 ...

  9. smack 监听不同packet机制

    之前做即时通讯,扒了smack源码来参考.说下其中解包后进行通知的机制. Filter类:accept(Packet packet)函数,传入packet在此函数中进行对比判断,返回true 则通过此 ...

随机推荐

  1. CodeForces 821D Okabe and City

    Okabe and City 题解: 将行和列也视为一个点. 然后从普通的点走到行/列的点的话,就代表这行/列已经被点亮了. 然后将费用为0的点建上边. 注意讨论(n,m)非亮的情况下. 代码: #i ...

  2. poj 2115 求线性同余方程 C Looooops(好理解欧几里德扩展定理怎么应用)

    C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29061   Accepted: 8360 Descr ...

  3. 【Linux】一些常用命令(待整理)

    一.关机重启命令 二.查询ip 三.查询杀死进程 四.CentOS7 关闭防火墙 五.vim常用 5.1 搜索 5.2 设置行号 剪切 替换 一.关机重启命令 shutdown -h 10 #计算机将 ...

  4. 【Offer】[42] 【连续子数组的最大和】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一个整型数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n). ...

  5. python每日经典算法题5(基础题)+1(中难题)

    现在,越来越多的公司面试以及考验面试对算法要求都提高了一个层次,从现在,我讲每日抽出时间进行5+1算法题讲解,5是指基础题,1是指1道中等偏难.希望能够让大家熟练掌握python的语法结构已经一些高级 ...

  6. change,Ringo题目

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. 四大组件初始之Broadcast

    在进行应用设计时,需要获取很多环境参数,像电量,音量,亮度,网络等.相比较每次去询问android这些信息改变了吗.让Android告诉我们,这些信息改变了更加合理.只要这些信息改变,Android通 ...

  8. Net基础篇_学习笔记_第十一天_面向对象(类)

    类语法:[public] class 类名{ 字段; 属性; 方法;}写好了一个类之后,我们需要创建这个类的对象,那么,我们管创建这个类的对象过程称之为类的实例化.使用关键字 new. this:表示 ...

  9. centos安装流量监控软件,并指定端口号监控

    yum install -y iptraf 安装好以后使用进入界面: iptraf-ng enter回车,比如22端口,就是22 22 然后退出 重新登录 ok!

  10. javascript实现二叉搜索树

    在使用javascript实现基本的数据结构中,练习了好几周,对基本的数据结构如 栈.队列.链表.集合.哈希表.树.图等内容进行了总结并且写了笔记和代码. 在 github中可以看到  点击查看,可以 ...