有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在尝试为Android创建一个应用程序,我遵循本教程http://developer.安卓.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
}

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

有谁能启发我吗?多谢各位


共 (3) 个答案

  1. # 1 楼答案

    当您将此类内容放入xml中时:

    android:onClick="sendMessage" 
    

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

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

  2. # 3 楼答案

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

    正如你所看到的,这是一个相当多的代码编写,但它确实提供了更多的灵活性,如果你需要它