乐鱼电竞

    教育行业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 分享到:
    和我们在线交谈!
    【网站地图】【sitemap】