Android Studio中“View v”的含义

时间:2017-07-24 00:03:15

标签: java android android-view

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

在包含我的按钮的XML布局文件中,我将以下行添加到我的Button XML元素中:

android:onClick="handleClick"

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

public void handleClick() { /* ... */ }

然而,当我使用此代码运行我的应用程序时,它崩溃了。我能够通过将我的方法签名更新为:

来修复此崩溃
public void handleClick(View v) { /* ... */ }

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

3 个答案:

答案 0 :(得分:3)

这是因为您可能希望将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"/>

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

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

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

    }
}

答案 1 :(得分:2)

提供的View参数表示收到点击事件的View。如果您为多个handleClick重复使用View方法,这可能很有用(在这种情况下,您可以检查传递给方法的id的{​​{1}}以确定哪个点击了View,如Enzokie's answer所示。

即使您未在点击逻辑中使用此参数,也必须在定义方法时包含此View参数。这是因为reflection用于定位与您在XML中提供的名称对应的方法,并且方法名称,参数计数和参数类型都是Java中uniquely define a method所需的。查看this section of the View source code以确切了解此反思查找的工作原理!

答案 2 :(得分:1)

查看v 是xml文件的对象,该文件在 onCreate 方法中引用。 要从xml引用任何组件,您必须使用 v 来获取组件的ID。

<强>条件

  

如果要在类文件中使用 onClick ,则必须为xml中的组件指定id。