文档管理中心
我的

Android | 事件监听处理机制的五种方式

文章目录

一、事件监听是什么?

二、事件监听机制流程

三、五种不同的使用方式

0、效果展示

1、直接用匿名内部类

2、使用内部类

3、使用外部类

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

5、直接绑定到标签

一、事件监听是什么?

其实就简单的一句话:响应用户的操作,然后在后台加上相应的操作。比如:我们点击了页面上的一个按钮,事件监听捕捉到了点击,然后再给出用户一种反馈。


二、事件监听机制流程

话不多说,先上个流程图:


写一个事件大致步骤为:


进行UI设计

加载UI,获得控件

为该控件设置监听器,监听用户的操作

用户触发事件源的监听器

生成对应事件对象

将产生的事件对象作为参数传入事件处理器

对事件对象进行判断,执行对应的事件的处理方法

三、五种不同的使用方式

任务:简单的按钮点击,提示Toast信息的程序


0、效果展示

1、直接用匿名内部类

按照上面的步骤:

第一步:设计UI,由于只弄了个Button,不再贴出代码,这个Button对应的ID是btn

第二步::加载UI,并获得控件。

首先先声明一个私有的对象:

private Button btn1; //声明Button


然后通过findViewById找到这个控件并强制转换为Button类型:


btn1 = (Button) findViewById(R.id.btn); //通过findViewById找到对应的控件

1

第三步:设置监听器,使用setOnClickListener,然后匿名内部类里面重写了onClick方法


btn1.setOnClickListener(new OnClickListener() { //为该控件绑定事件监听

//重写onClik方法,并写上对应的操作

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Toast.makeText(getApplicationContext(), "你点击了按钮", Toast.LENGTH_LONG);

}

});


接下来的步骤就是事件触发的具体流程了,不再赘述,请看上方流程图。

整合一下上述步骤:

private Button btn1; //声明Button


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn1 = (Button) findViewById(R.id.btn); //通过findViewById找到对应的控件

btn1.setOnClickListener(new OnClickListener() { //为该控件绑定事件监听

//重写onClik方法,并写上对应的操作

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Toast.makeText(getApplicationContext(), "你点击了按钮", Toast.LENGTH_LONG).show();

}

});

}


匿名内部类是平常最常使用的一种,直接setXxxListeren后,重写里面的方法就行了;但它的复用性不高


2、使用内部类

有了上面的步骤,下面直接怼就行了:

private Button btn1; //声明Button


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn1 = (Button) findViewById(R.id.btn); //通过findViewById找到对应的控件

btn1.setOnClickListener(new BtnClickListener()); //直接new一个内部类当作参数传递

}


//定义一个类,实现OnClickListener接口

class BtnClickListener implements OnClickListener{

//重写方法

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Toast.makeText(getApplicationContext(), "你点击了按钮", Toast.LENGTH_LONG).show();

}

}

使用内部类可以进行复用,可以直接访问外部类的所有组件


3、使用外部类

由于外部类不能直接调用Activity界面上的控件,所以再调用外部类的时候需要用构造方法将需要的控件进行传递。

myClick.java:

public class MyClick implements OnClickListener {


private TextView tv;


public MyClick(TextView tv) {

// TODO Auto-generated constructor stub

this.tv = tv;

}


@Override

public void onClick(View v) {

// TODO Auto-generated method stub

tv.setText("你点击了按钮");

}

}


MainActivity.java:


private Button btn1; // 声明Button

private TextView tv1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.text);

btn1 = (Button) findViewById(R.id.btn); // 通过findViewById找到对应的控件

tv1 = (TextView) findViewById(R.id.tv);

btn1.setOnClickListener(new MyClick(tv1));

}


一般很少使用外部类处理事件监听机制

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

即用这个类直接实现OnClickListener接口,在这个类里面重写onClick方法即可:

public class MainActivity extends Activity implements OnClickListener {


private Button btn1; // 声明Button

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.text);

btn1 = (Button) findViewById(R.id.btn); // 通过findViewById找到对应的控件

btn1.setOnClickListener(this); //直接写this

}


@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Toast.makeText(getApplicationContext(), "你点击了按钮", Toast.LENGTH_LONG).show();

}

//………还有方法没有列出

}

5、直接绑定到标签

直接在标签上绑定点击方法:

    <Button

        android:id="@+id/btn"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="测试" 

        android:onClick="myClick"

        />


然后在直接写自定义方法:


public void myClick(View v) {

Toast.makeText(getApplicationContext(), "你点击了按钮", Toast.LENGTH_LONG).show();

}


点赞
2
收藏
3
回复
2
分享
举报
浏览551 发布于2020-04-09 06:29未知归属地
全部评论
最多点赞
最新发布
最早发布
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。