【问题标题】:Passing the View class object as a parameter to the method invoked by a button (View view)将 View 类对象作为参数传递给按钮调用的方法(视图视图)
【发布时间】:2012-12-20 11:18:44
【问题描述】:

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

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

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

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

有人能告诉我吗?谢谢你

【问题讨论】:

  • Hi View 参数定义了按钮小部件,它将在视图参数中获取按钮小部件的ID。所以你需要把视图参数放在 sendMessage() 方法中

标签: java android xml


【解决方案1】:

如果您仔细查看 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();
    }
}

如您所见,要编写的代码要多得多,但它确实为您提供了更大的灵活性,如果您需要的话。

【讨论】:

    【解决方案2】:

    方法(通常称为onClick(View view))方法接受一个参数(与之关联的视图)。有关该功能的更多信息,请参阅http://developer.android.com/reference/android/view/View.OnClickListener.html。如果您不使用该参数,您不会期望它起作用,对吗?

    【讨论】:

      【解决方案3】:

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

      android:onClick="sendMessage" 
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-27
        • 2022-01-22
        • 2017-06-04
        相关资源
        最近更新 更多