ANDROID基础学习笔记_1_方法的四种绑定方式

第一次写安卓应用程序,好激动。。。


首先右键资源管理器(我也不知道是不是叫这个名字) - new - android application project,填选一些东西之后,第一个安卓应用程序就创建好了。

例子是通过做一个电话拨号器来实现的。

先在Graphical Layout视图下拖拽控件,一个电话输入框(Phone),一个按钮(Button)

ANDROID基础学习笔记_1_方法的四种绑定方式_第1张图片

.xml文件源码如下:



    
    
    

    
    

下面开始介绍方法的四种绑定方式。

加载布局文件需要在.java文件的onCreate方法里写上:setContentView(R.layout.activity_main);

给一个按钮绑定方法,首先要找到这个按钮;想要拨打电话就要找到我们输入的电话号码。

所以我们就可以在.java文件的onCreate方法里写上这两行代码分别获取电话号码和按钮控件:

EditText et = (EditText) MainActivity.this.findViewById(R.id.bt_dail);

Button bt = (Button) this.findViewById(R.id.bt_dail);

第一种: 给按钮注册单击事件,创建内部类,定义点击事件

首先创建内部类,实现OnClickListener接口,重写onClick事件:

private class MyListener implements OnClickListener{		
//		1. 当按钮被点击时调用的方法
		@Override
		public void onClick(View arg0) {
			callPhone();
		}
	}
这里的callPhone是调用的本类的一个方法:

//抽出来的拨打电话方法
	private void callPhone() {
		//将获取的editText转化成字符串
		String num = et.getText().toString().trim();
		//若号码为空则给出提示
		if(TextUtils.isEmpty(num)){
			Toast toast = Toast.makeText(MainActivity.this, "号码不能为空", Toast.LENGTH_SHORT);
			toast.show();
			return;
		}else{
			//若号码不为空那么就创建一个Intent类
			Intent intent = new Intent();
			//调用设置动作的方法setAction,传递参数Intent.ACTION_CALL
			intent.setAction(Intent.ACTION_CALL);
			//调用设置数据的方法setData,传递Uri。URL:统一资源定位符 URI:统一资源标识符
			intent.setData(Uri.parse("tel:"+num));
			//执行方法,即拨打电话
			startActivity(intent);
		}
	}
最后就是在onCreate方法里绑定到按钮上了。
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加载布局文件
        setContentView(R.layout.activity_main);
        //找到指定按钮,号码文本框
        Button bt = (Button) this.findViewById(R.id.bt_dail);
        EditText et = (EditText) MainActivity.this.findViewById(R.id.bt_dail);
//     //1. 给按钮注册单击事件,创建内部类,定义点击事件
        bt.setOnClickListener(new MyListener());
    }

第二种:创建匿名内部类

很简单,就是直接在按钮的setOnClickListener方法里传一个参数,这个参数就是声明出来的匿名内部类实例同样是重写onClick事件,整段代码写到onCreate方法里即可:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加载布局文件
        setContentView(R.layout.activity_main);
        //找到指定按钮,号码文本框
        Button bt = (Button) this.findViewById(R.id.bt_dail);
        EditText et = (EditText) MainActivity.this.findViewById(R.id.bt_dail);
		//2. 创建匿名内部类
		bt.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				callPhone();
			}
		});
第三种:实现OnClickListener接口

使生成的MainActivity类实现OnClickListener接口,重写onClick事件,直接调用:

					   //实现OnClickListener接口
public class MainActivity extends Activity implements OnClickListener {

    //将EditText改为全局变量
    private EditText et;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加载布局文件
        setContentView(R.layout.activity_main);
        //找到指定按钮
        Button bt = (Button) this.findViewById(R.id.bt_dail);
        et = (EditText) MainActivity.this.findViewById(R.id.bt_dail);
	//3. 实现OnClickListener接口
        bt.setOnClickListener(this);
    }
    //3.实现OnClickListener接口的onclick方法
    @Override
    public void onClick(View v) {
	switch (v.getId()) {
 	case R.id.bt_dail:
		 callPhone();
		break;
	 }
     }
}
这里我一直有个地方搞不懂,那就是为什么bt调用了setOnclicklistener方法,然而他却执行了实现的onclick方法。又不能看源码,真是别扭。。。

而且听介绍说,这是最推荐使用的一种方式。。。

第四种:在布局文件绑定点击方法

上面的.xml文件,button标签里有一个属性android:onClick就是用来绑定点击事件的,所以.xml里起的名字是dailButtonClick,.java就要对应着有一个相同名字的方法dailButtonClick

	//4. 在布局文件绑定点击方法
	public void dailButtonClick(View v){
		callPhone();
	}
以上就是四种方法绑定方式,最主要的就是:

1.记住怎么布局应用程序界面,学会运用各种属性;

2.记住几个比较重要的方法,比如setContentView、通过id定位布局文件的空间this.findViewById(R.id.bt_dail)、按钮设置监听的方法Button.setOnClickListener、EditText获取文本的方法getText、判断文本是否为空的方法TextUtils.isEmpty(num)、显示提示信息Toast.makeText(MainActivity.this, "号码不能为空", Toast.LENGTH_SHORT)、Intent类里的设置动作的方法setAction和设置数据的方法setData、还有执行拨打电话这个动作的方法(我猜他和setContentView都来自父类Activity);

3.Button、EditText这两个类好像都来自widget类包?以后有时间查查去。。。

4.eclipse抽取一段代码出来单独做一个方法的方法:选中要抽取的代码—右键—Refactor—Extract Method然后就可以抽出来在哪个类里生成用什么修饰符修饰的方法了。。。快捷键alt+shift+m

这就是第一次学到的一点东西,也许有很多理解不到位的地方吧。希望以后能通过练习增强理解。

你可能感兴趣的:(ANDROID)