教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

Android培训之电话拨号器之点击事件的优化

更新时间:2016年03月16日16时53分 来源:传智播客Android培训学院 浏览次数:

电话拨号器之点击事件的优化
按钮的点击事件有多种写法,下面就不同的写法进行讲解。

编写内部类

在项目中编写电话拨号器的点击事件时,我们是通过新建一个MyButtonListener的内部类来实现的。如图1-1是我们的处理方式,这种处理方式有什么弊端呢?假设我们的界面中有多个按钮,这就意味这我们需要写多个内部类了,很明显,这种做法是不合理的。
//        找到一个关系的按钮
  Button bt_dail =(Button) findViewById(R.id.bt_dail);
//        给按钮注册一个点击事件的监听事件
  bt_dail.setOnClickListener(new MyButtonListener());
图1-1所示

编写匿名内部类

上述方法是按钮点击事件的第一种写法,当界面按钮很少时可以使用这种设计方式。下面是按钮点击事件的第二种写法,该方法是通过编写该按钮的匿名内部类来实现其点击事件的。如图1-2所示:
bt_dail.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String number = et_phone.getText().toString().trim();
if ("".equals(number)) {
Toast.makeText(MainActivity.this, "电话号码不能为空", Toast.LENGTH_SHORT).show();
} else {
// 拨打电话,激活系统的拨打电话应用,把电话号码传给系统的应用。
Intent intent = new Intent();// 新建一个意图
intent.setAction(Intent.ACTION_CALL);// 设置意图要执行的动作
intent.setData(Uri.parse("tel:" + number));// 设置意图执行动作的对象
startActivity(intent);// 开启这个意图
}
}
});
图1-2所示
图1-2是直接编写点击按钮的匿名内部类,然后实现该匿名内部类的方法来完成点击事件的响应事件。对于拨打电话这个响应事件,我可以把它封装成一个方法。如图1-3所示,这样来整个代码就显的更加整洁。
private void callPhone() {
String number = et_phone.getText().toString().trim();
if ("".equals(number)) {
Toast.makeText(MainActivity.this, "电话号码不能为空", Toast.LENGTH_SHORT)
.show();
} else {
// 拨打电话,激活系统的拨打电话应用,把电话号码传给系统的应用。
Intent intent = new Intent();// 新建一个意图
intent.setAction(Intent.ACTION_CALL);// 设置意图要执行的动作
intent.setData(Uri.parse("tel:" + number));// 设置意图执行动作的对象
startActivity(intent);// 开启这个意图
}
}
图1-3所示

使Activity实现点击事件的接口

第二种方法比第一种方法要优化很多,但是也存在一些问题。假设按钮特别多时,我们就得写多个匿名内部类。很显然,这种做法也是不合理的。为此我们可以让当前Activity实现点击事件的接口,然后重写该接口中的方法来处理点击事件的响应。
l Activity如何实现点击事件的接口,如图1-4所示:
public class MainActivity extends Activity implements OnClickListener{
private  EditText et_phone;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.phone_ui);
        .......
图1-4所示
l 重写接口中的方法
// 点击事件的第三中方法
@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.bt_dail:
callPhone();
break;
default:
break;
 }
}
图1-4所示
在重写方法中通过判断点击按钮的id来确定点击的是哪一个按钮,从而进行不同的事件响应。这时监听事件的添加要按如图1-5所示来编写:
Button bt_dail = (Button) findViewById(R.id.bt_dail);
// 给按钮注册一个点击事件的监听事件
bt_dail.setOnClickListener(this);
图1-5所示

xml文件来定义Button的点击事件

第三种方法要比第二种方法优化很多,当依旧存在问题。假设界面中有100个按钮这就意味着我们在swith中做100次判断,很显然这种方法是不可取的。为此我们可以在定义xml布局文件时给相关的按钮注册监听。如图1-6为注册监听的方法:
   <Button
        android:onClick="dailPhone"
        android:id="@+id/bt_dail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="拨打此号码" />
图1-6所示
在Activity中要编写点击事件的方法,代码如图1-7所示:
// 在xml中定义button点击时调用的方法
public void dailPhone(View view) {
callPhone();

图1-7所示
注意:在第四种方法给相关按钮注册点击事件时,首先要在XML文件添加该按钮的onClick属性并赋值,其次onclick属性的赋值一定要是activity中的一个方法,再次该方法一定要有一个参数,且该参数的类型是View,最后保证该方法是一个public类型的。
总结:上述方法各有优劣,项目时要根据具体的情况选择不同的处理方法。一般有一两个按钮的点击事件时可以选择第一种方法;四到五个按钮时选择第二种方法;十到二十个按钮时选择第三种方法,其它情况要选择第四种方法

本文版权归传智播客Android培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Android培训学院
首发:http://www.itcast.cn/android/
0 分享到:
和我们在线交谈!