由来:常规的写法参见《写一个apk》,每次点击按钮,按钮先查找文本框等元素,然后再操作,其实查找操作是很费时的操作,因此将该定义放到Activity的onCreate中:Oncreate只会执行一次,这样Activity一旦执行,就先创建好控件们了。
第二种方法:通过匿名内部类的方法:就是button.setOnClickListener(new OnClickListener(){
//实现OnClickListener接口
@Override
public void onClick(View v){
String number = mEditText.getText().toString();
Log.i(tag,number); //这个是说,在运行时,log框里面有个tag标签,如果里面输出的是MainActivity,遇到电话号码时候,就输出了;
Log.i(tag,“匿名内部类”); //这句打印出来就是,调用到匿名内部类时候,打印输出“匿名内部类”这几个字。
//拨打电话号码
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
//android里面
startActivity(intent);
}
));
方法三:企业里常用的方法---让MainActivity作为实现者,实现按钮注册的点击事件。企业这么写,是因为界面上通常好几十个按钮,如果每个按钮都用匿名内部类方法写,很不方便;用这种方法,只需要多写几个switch分支即可。
1. button.setOnClickListener(this);
2. 添加mainActivity implements OnClickLIstener()实现接口
3. 增加实现接口的方法
public void onCclick(View v){
//参数v 代表的就是当前被点击的条目 对应的view对象
//下面进行判断,如果v获取的id,就是R.id.bt_dail,就算OK
switch(v.getId()){
case R.id.bt_dail:
//响应按钮的点击事件,具体呢就是把上面的那段代码贴过来,即可
String number = mEditText.getText().toString();
Log.i(tag,number); //这个是说,在运行时,log框里面有个tag标签,如果里面输出的是MainActivity,遇到电话号码时候,就输出了;
Log.i(tag,“匿名内部类”); //这句打印出来就是,调用到匿名内部类时候,打印输出“匿名内部类”这几个字。
//拨打电话号码
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
//android里面
startActivity(intent);
}
}
方法四:在laytout的布局xml中,把按钮的点击事件,绑定到某个方法上:
1. <Button
android:onClick="dail" />
2. 在MainActivity里定义dail方法:
public void dail(View view){
//里面还是那段代码,放到这里来了
String number = mEditText.getText().toString();
Log.i(tag,number); //这个是说,在运行时,log框里面有个tag标签,如果里面输出的是MainActivity,遇到电话号码时候,就输出了;
Log.i(tag,“匿名内部类”); //这句打印出来就是,调用到匿名内部类时候,打印输出“匿名内部类”这几个字。
//拨打电话号码
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
//android里面
startActivity(intent);
}
我们知道,所有的控件都可以被click,就拿TextView来说,需要在布局文件中添加两句话才可以:
<TextView
android:Onclick = "textview_click"
android:clickable = "true"/>
然后在mainActivity中添加该方法:
public void textview_click(View view){
Log.i(tag,"文本框被点击了");
}