Java监听器方法参数



我正在为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" ??
}

onClickactionPerformed都是回调方法,这意味着它们由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对象

因为ButtonView的子类,所以通过用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模式。

最新更新