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

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找到对应的控件

第三步:设置监听器,使用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、直接绑定到标签

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

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();

}

相关推荐

小鹏读三国十七

小鹏读三国十七

06-30 👁️‍🗨️ 9812
MacBook Air 深空灰色与银色 - 最佳购买颜色
竹建筑用的原竹材料分类有哪些

竹建筑用的原竹材料分类有哪些

07-16 👁️‍🗨️ 6487
打印机如何单面打印

打印机如何单面打印

07-06 👁️‍🗨️ 2814
DNF全职业Buff药剂大汇总:各类强化buff效果的药剂详解