方式一【定义内部类】:
根据ui写业务逻辑 在mainActivity->onCreate方法里面写逻辑
btn_call.setOnClickListener(new MyClickListener());
给按钮设置一个点击事件
//加载一个布局setContentView(R.layout.activity_main); //[1]找到我们关心的空间edittext button et_number = (EditText) findViewById(R.id.editText1); //[2]找到按钮 Button btn_call = (Button) findViewById(R.id.button1);
自己定义一个类去实现方法需要的参数类型
private class MyClickListener implements OnClickListener{ //当按钮被点击的时候调用 @Override public void onClick(View v){ //[4]获取edittext文本内容 String number = et_number.get_Text().toString().trim(); if("".equals(number)){ /** * context 上下文 */ Toast.makeText(MainActivity.this,"number不能为空",1).show(); return; } //[5]进行电话拨打 意图Intent Intent intent = new Intent(); //创建一个意图对象 //[5.1]设置动作 intent.setAction(Intent.ACTION_CALL); //[5.2]设置要拨打的数据 /** * uri:统一资源提示符 */ intent.setData(Uri.parse("tel:"+number)); //[6]开启意图 startActivity(intent); } }
一定要记得加上拨打电话的权限
方式二【定义匿名内部类】:
//按钮的第二种点击事件
//第一种的方法是这样的 btn_call.setOnClickListener(new MyClickListener()); btn_call.setOnClickListener(new MyClickListener(){ @Override public void onClick(View v){ //[4]实现拨打电话的逻辑 //把之前内部类里面拨打电话的逻辑拿出来写成一个function(callPhone)然后直接调用就可以了 callPhone(); } });
方式三(当页面上按钮非常多的情况下适用):
//在onCreate找到按钮空间定义多个 Button btn_call1 = (Button) findViewById(R.id.button1); Button btn_call2 = (Button) findViewById(R.id.button2); Button btn_call3 = (Button) findViewById(R.id.button3); btn_call.setOnClickListener(this); //this是MainActivity 这个参数的类型必须是onClickListener //所以在当前类上实现onclick接口类型 //public class MainActivity extends Activity implements onClickListener //注意引用的是View包下的onClickListene //实现这个接口要实现这个接口内未实现的方法onClick //当点击按钮的时候执行 @Override public void onClick(View v){ //具体判断点击的是哪个按钮 switch(v.getId()){ case R.id.button1://代表点击了第1个按钮 break; case R.id.button2://代表点击了第2个按钮 break; case R.id.button3://代表点击了第3个按钮 break; default: break; } }
方式四:(声明一个方法 方法名和你要点击的这个按钮在布局中声明的onClick一样)
在activity_main.xml里给Button添加onClick属性