将View类对象作为参数传递给按钮调用的方法(视图视图)

wil*_*oso 10 java xml android

我正在尝试为Android创建一个应用程序,我按照本教程http://developer.android.com/training/basics/firstapp/starting-activity.html

有一部分

/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    // Do something in response to button
}
Run Code Online (Sandbox Code Playgroud)

然后我按照本教程,一切正常,直到我删除参数 View view

我的问题就是为什么每次我删除它,所以函数只是:

/** Called when the user clicks the Send button */
public void sendMessage() {
    // Do something in response to button
}
Run Code Online (Sandbox Code Playgroud)

我运行应用程序,它被迫关闭.

谁能开导我?谢谢

Ale*_*s G 13

如果仔细查看XML,您将在按钮上看到以下属性:

android:onClick="sendMessage"
Run Code Online (Sandbox Code Playgroud)

此属性表示单击按钮时,消息

public void sendMessage(View view)
Run Code Online (Sandbox Code Playgroud)

被调用.这是因为接口中的onClick方法OnClickListener需要类型参数View.当你删除参数时,android仍然会尝试调用方法,sendMessage(View view)但该方法不再存在,因此你得到一个强制关闭.

参数view是单击的实际视图(在您的情况下为按钮).这样,您可以指定多个按钮来调用相同的方法,并在方法内部检查单击了哪个按钮.

如果你想让方法没有参数,那么你应该在代码而不是XML中分配它.将XML更改为

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send"
    android:id="@+id/send_button" />
Run Code Online (Sandbox Code Playgroud)

(请注意,android:onClick属性现已删除并android:id添加.)然后在您的onCreate方法活动中添加以下行:

this.findViewById(R.id.send_button).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        sendMessage();
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这需要编写更多代码,但如果您需要它,它确实为您提供了更多灵活性.


小智 5

方法(通常称为onClick(View view))方法采用参数(与之关联的视图).有关该功能的更多信息,请参阅http://developer.android.com/reference/android/view/View.OnClickListener.html.如果你放弃参数,你不会期望它工作,你呢?