android: xml属性android:onClick,为什么方法需要View参数

3
当我在activity的xml中创建android:onClick属性时,由onClick定义的方法需要具有View参数,为什么是View?
例如: 我的activity中的onClick方法----------> public void sayHello(View v){...}
考虑下面的代码,我没有使用view变量,但我仍然需要在方法中传递它,为什么?
public void onClick(View view){
        TextView t= new TextView(this);
        t=(TextView)this.findViewById(R.id.textView2);
        t.setText("new text");
    }

如果您有五个按钮调用相同的 onClick 方法,则您正在询问的参数是唯一能告诉您哪个按钮被点击的东西。 - Voicu
2个回答

8
所以你知道是哪个 View 调用了这个方法。 这就像为您的活动实现 OnClickListener 一样,创建的方法是 onClick(View v)(或者根据您的 Eclipse 是 arg0),从 xml 中定义它只是为 View 指定一种监听器,并将该方法作为参数传递给监听器中的方法。
一旦进入方法,您可以对按钮的 id 进行 switch,执行不同的操作:
public void myOnClickMethod(View v){
    switch(v.getId()){
       case R.id.button1:
          //Do something for button 1
       break;
       case R.id.button2:
          //Do something for button 2
       break;
    }
}

简而言之,当您定义android:onClick="myOnClickMethod"属性时,Android会为您实现OnClickListener

1

在回答问题之前,我想先说明一下视图是什么...

Android 应用包含活动,类似于屏幕,进一步包含 GUI 元素(如按钮)。简单地说,这些 GUI 元素被称为视图。

回答你的问题...

想象一下这样一种情况:您的活动有多个按钮(假设为 5),并且在点击这些按钮时调用相同的函数(即 onClick())。那么,程序如何知道点击了哪个按钮。答案很简单,只需将一个视图参数传递给 onClick() 函数,这将允许访问有关所点击的按钮的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接