1
2-3
对于初学者而言,按钮等的onClick方法似乎有点“麻烦”,每次都手工敲出来会不胜其烦,降低学习的效率和兴趣的。实际上,Android Studio提供了非常人性化的快捷键帮助自动编写onClick方法,跟我来…这里以按钮为例说明如何方便的添加onClick方法,根据情况可以采用两种不同的方法。
1 使用匿名类
如果页面上的按钮不多,比如只有一个时,使用匿名类实现事件对象很方便,代码量也是最小的。其步骤是:
查询并获取按钮对象,这一步没什么稀奇的了:
Button button = (Button)findViewById(R.id.send_notice);
1
Buttonbutton=(Button)findViewById(R.id.send_notice);
接着敲入button.,注意在“.”处稍作停顿,Android Studio即可弹出一个自动补全代码的提示列表,其中第一项往往就是我们需要的代码(Android Studio很智能的),如1所示。
图 1: 自动补全代码的提示列表
选择希望的自动补全代码后,直接按回车键即可,如2所示,可见Android Studio自动添加了setOnClickListener方法,并且提示(参见setOnClickListener方法参数列表上方的气泡)setOnclickListener方法的参数应该是一个OnClickListener对象。
图 2: 自动补全部分代码后的样子
很显然,经过了第3步后,我们已经知道setOnclickListener方法的参数应该是一个OnClickListener对象,可是如何创建这个对象呢?显然要使用new操作符了,因此只要在setOnclickListener方法中输入new␣(注意一定要输入一个空格键),然后按下快捷键,Android Studio有足够的智能知道你在这里要创建什么类型的对象,如3所示。
图 3: 自动补全OnClickListener对象
在第4步中,Android Studio自动猜到了我们要创建的对象类型为View.OnClickListener,因此只要在补全列表中选择第一个(默认已经选中了)按下回车键确认即可,结果如4所示。
图 4: 自动补全OnClickListener对象之后
最后一步!在第5步中可以看到,自动补全的OnClickListener对象下面画着红色的波浪线,表示这段代码有问题。将鼠标移动到红色波浪线标出的代码上,按下快捷键,Android Studio给出了如5所示的提示,选择Implement methods(默认已选中)按下回车键确认,在接下来如6所示的窗口中选择onClick方法(默认已自动选中),即可自动创建所需要的onClick方法,如下所示:
Button button = (Button)findViewById(R.id.send_notice);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
1
2
3
4
5
6
7
Buttonbutton=(Button)findViewById(R.id.send_notice);
button.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
}
});
图 5: 自动补全onClick方法的补全列表
图 6: 自动补全onClick方法的选择窗口
看起来自动生成onClick方法好麻烦啊!但是其实只需要输入为数不多的几个字母,再记住两个快捷键,就非常便捷了。实际上,对于本例,输入的键盘序列为:。多练习几次,就能够很熟练的掌握这个方法的。
如果足够熟练,你会发现另外一个更快的输入方法,键盘序列为:,读者可自行尝试,并思考:为什么要输入字母O?
1
解释:在上面第3步我们已经看到,Android Studio自动提示setOnclickListener方法需要一个OnClickListener对象,因此在这里输入字母O,Android Studio能够智能的判断我们希望创建一个以字母O开头的对象,在这里即View.OnClickListener。
2 实现接口
如果页面中包含多个按钮,使用1中介绍的匿名类方法就显得比较啰嗦,此时可以让当前的Activity类实现OnClickListener接口,在一个onClick方法中处理多个按钮的点击事件。下面介绍快速生成代码框架的方法。
首先获取button对象,假设这里有两个按钮,分别是button1和button2:
Button button1 = (Button)findViewById(R.id.button1);
Button button2 = (Button)findViewById(R.id.button2);
1
2
Buttonbutton1=(Button)findViewById(R.id.button1);
Buttonbutton2=(Button)findViewById(R.id.button2);
添加两个按钮的事件响应代码,参考1中的第2步,生成的代码为:
button1.setOnClickListener(this);
button2.setOnClickListener(this);
1
2
button1.setOnClickListener(this);
button2.setOnClickListener(this);
注意到,在第2步中,我们将this作为setOnClickListener方法的参数,而我们知道,setOnClickListener的参数应该是一个View.OnClickListener类型的对象,因此就需要在this中实现View.OnClickListener接口的方法,这样this就可以“向上收窄”为一个View.OnClickListener类型的对象。快捷的操作方式是,将光标移动到this上面,按下,如7所示选择MainActivity实现View.OnClickListener接口,然后在接下来的窗口中选择实现onClick方法,如8。
图 7: 准备自动创建onClick方法
图 8: 选择onClick方法的窗口
如此操作后你会发现,Android Studio自动声明MainActivity实现了View.OnClickListener接口,并自动给出了一个onClick方法的框架,很方便。在自动生成的onClick方法中再区分不同的按钮就行事件处理就可以了,大致的代码逻辑如下所示:
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button1:
// button1 logic
break;
case R.id.button2:
// button2 logic
break;
default:
}
}
1
2
3
4
5
6
7
8
9
10
11
12
@Override
publicvoidonClick(Viewv){
switch(v.getId()){
caseR.id.button1:
// button1 logic
break;
caseR.id.button2:
// button2 logic
break;
default:
}
}
0