我正在为Android游戏项目编写以下代码:
public class GameActivity extends Activity implements OnClickListener {
Button b1 = null;
Button b2 = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
b1 = new Button(this);
b2 = new Button(this);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// how parameter "v" got its value.,
// and where it was initialized???
}
}
我注意到onClickListener的CCD_ 1方法,并想问参数"View v"在哪里初始化?我知道它包含点击视图的引用,但在哪里和它是如何获得价值的?
同样的问题:
public void actionPerformed(ActionEvent e){
// where/how it initialized "e" ??
}
onClick
和actionPerformed
都是回调方法,这意味着它们由Android操作系统调用,并将参数传递给它们。
当任何用户触摸屏幕时,Android都有自己的处理程序/缓冲区来处理corinates(x和y)和dectects视图。每个视图都有自己的窗口标记,注册在WindowManager中,并处理对onClick(视图v)的调用;
只要看看代码:
请参阅http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.4_r1/android/view/View.java#3436如何创建View
对象
因为Button
是View
的子类,所以通过用Button b1 = new Button(this);
实例化Button来创建View v
参数
当您调用setOnClickListener
时,您注册了一个应该执行的回调方法(在View对象上)。http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.4_r1/android/view/View.java#4379
真正的点击是在方法onClick(View v)
0中执行的。这个方法从onclick监听器方法读取您注册的onclick(View v)并执行它
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.4_r1/android/view/View.java#4432
您还可以查看Observer模式。