Android Studio 中“View v”的含义

Flo*_*her 0 java android android-view

我正在尝试在我的 Android 应用程序中实现按钮点击处理。

在包含我的按钮的 XML 布局文件中,我向我的ButtonXML 元素添加了以下行:

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

我还在Activity使用此布局的 中定义了具有以下签名的方法:

public void handleClick() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

但是,当我使用此代码运行我的应用程序时,它崩溃了。我能够通过将我的方法签名更新为以下内容来修复此崩溃:

public void handleClick(View v) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么我需要包含这个View参数?

Enz*_*kie 6

这是因为您可能希望将您的handleClick方法用于 XML 中的 2 个或更多按钮。

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="handleClick"/>

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="handleClick"/>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,可能不清楚哪个按钮触发了回调。将View v帮助您识别如

public void handleClick(View v) {
    if (v.getId() == R.id.button1) {

    } else if(v.getId() == R.id.button2) {

    }
}
Run Code Online (Sandbox Code Playgroud)