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

我正在尝试为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 } 

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

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

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

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

谁能开导我? 谢谢

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

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

 android:onClick="sendMessage" 

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

 public void sendMessage(View view) 

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

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

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

  

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

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

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

当你把这种东西放在你的xml中时:

 android:onClick="sendMessage" 

android框架将在你的按钮上添加一个OnClickListener。 这个“自动”生成的OnclickListener将尝试使用一个View类型的参数调用名为“sendMessage”的方法。

如果此方法不存在,则只会崩溃。