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



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

there is part

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

,然后我按照这个教程,一切工作,直到我删除参数View view

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

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

,我运行应用程序,它强制关闭。

谁能给我点化一下吗?谢谢你

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

android:onClick="sendMessage"

这个属性意味着当按钮被点击时,消息

public void sendMessage(View view)
调用

。这是由于OnClickListener接口中的onClick方法需要一个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" />

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

this.findViewById(R.id.send_button).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        sendMessage();
    }
}
如您所见,这是相当多的代码要写,但它确实提供了更多的灵活性,如果你需要它。

方法(通常称为onClick(View view))方法接受一个参数(它所关联的视图)。有关该函数的更多信息,请参阅http://developer.android.com/reference/android/view/View.OnClickListener.html。如果你去掉这个参数,你就不会期望它工作,对吧?

当你在xml中添加这些内容时:

android:onClick="sendMessage" 
android框架会在你的按钮上添加一个OnClickListener。这个"自动"生成的OnclickListener将尝试调用一个名为"sendMessage"的方法,该方法只有一个View类型的参数。

如果这个方法不存在,它会崩溃。

最新更新