事件处理之二:点击事件监听器的五种写法
首选方法二!
方法一:写一个内部类,在类中实现点击事件
1、在父类中调用点击事件
bt_dail.setOnClickListener(new MyButtonListener());
2、创建内部类
private class MyButtonListener implements OnClickListener{ /** * 当按钮被点击的时候调用 */ @Override public void onClick(View v) { callPhone(); } }
方法二:使用匿名内部类
bt_dail.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { callPhone(); } })
1、实现点击接口
public class MainActivity extends Activity implements OnClickListener
2、调用点击事件方法
bt_dail.setOnClickListener(this);
3、实现接口方法
@Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_dail: callPhone(); break; default: break; } }
方法四、在layout XML文件中定义button点击时所调用的方法
1、指定方法
<Button
android:id="@+id/bt_dail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="dailPhone"
android:text="拨打此号码" />
2、定义方法
public void dailPhone(View view){ callPhone(); }
以下代码参考自《张泽华android视频》
package com.itheima.phone; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { private EditText et_phone; /** * activity创建的时候 调用的方法 */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 设置activity显示的内容 setContentView(R.layout.phone_ui); //寻找edittext 界面初始化的时候寻找控件 ,避免多次的查询 et_phone = (EditText) findViewById(R.id.et_phone); //查找到一个关心的按钮 Button bt_dail= (Button) this.findViewById(R.id.bt_dail); //给按钮注册一个点击事件的监听器 // bt_dail.setOnClickListener(new MyButtonListener()); //2.点击事件的第二种写法,匿名内部类 /* bt_dail.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { callPhone(); } });*/ //3.点击事件的第三种写法 //bt_dail.setOnClickListener(this); //点击事件的第四种写法 } private void callPhone() { String number = et_phone.getText().toString().trim(); if("".equals(number)){ Toast.makeText(MainActivity.this, "电话号码不能为空", Toast.LENGTH_SHORT).show(); }else{ //TODO:拨打电话 激活系统的拨号应用 把电话号码传给系统的应用. // 打人 打酱油 动作+数据 泡茶 泡妞 Intent intent = new Intent();//意图 intent.setAction(Intent.ACTION_CALL);//设置动作 intent.setData(Uri.parse("tel:"+number)); startActivity(intent); } } /** * 点击事件的第一种写法 . 写一个内部类.实现点击事件的接口 * @author Administrator * */ private class MyButtonListener implements OnClickListener{ /** * 当按钮被点击的时候调用 */ @Override public void onClick(View v) { callPhone(); } } //点击事件的第三种写法 让activity实现点击事件的接口 @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_dail: callPhone(); break; default: break; } } //4.点击事件的第四种写法 在xml文件里面定义 button点击的时候 调用什么方法 public void dailPhone(View view){ callPhone(); } }
第五种方法:
把事件处理单独成一个类,基本没什么好处,除非此事件处理器经常被复用。