我是android的初学者,在为按钮设置onclick监听器时,传递的参数是什么意思:
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
所以,“new OnClickListener()”它被传递给一个方法,那么它不应该是一个对象吗?
如果它不是一个对象;那么我们如何使用“new”关键字呢?
为什么直接调用“onclick()”而不使用“this”关键字或其类名。
单击监听器 http://developer.android.com/reference/android/view/View.OnClickListener.html is an 界面 http://docs.oracle.com/javase/tutorial/java/concepts/interface.html并通过使用new OnClickListener()
作为参数btn1.setOnClickListener它实际上是在创建一个匿名内部类 http://mindprod.com/jgloss/anonymousclasses.html它实现了单击监听器。以及方法onClick必须需要声明,因为它是该接口类内的抽象方法。当按下按钮时,您在 onClick 中编写的任何代码都将被执行。
Update
在对象中使用匿名内部类来做到这一点:
//declaring OnClickListener as an object
private OnClickListener btnClick = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
};
//passing listener object to button
btn1.setOnClickListener(btnClick);
不使用匿名类来做到这一点:
public class YourActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
Button b = new Button(this);
//setting listener to button
b.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
这些方法之间的唯一区别是,如果您的按钮包含单击事件代码,该代码应该仅对该按钮有效/可用,那么您可以像在代码中一样使用内部类(因为它很容易立即执行) 。但是,如果有多个按钮需要在 onClick 事件上执行相同的代码,那么您可以将侦听器定义为对象并将其传递给它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)