Reputation: 6971
I am trying to implement button click handling in my Android app.
In the XML layout file that includes my button, I added the following line to my Button
XML element:
android:onClick="handleClick"
I also defined a method with the following signature in the Activity
that uses this layout:
public void handleClick() { /* ... */ }
However, when I ran my app with this code, it crashed. I was able to fix this crash by updating my method signature to:
public void handleClick(View v) { /* ... */ }
but I don't understand why I am required to include this View
parameter?
Upvotes: 0
Views: 5982
Reputation: 20128
The View
argument supplied represents the View
that received the click event. This may be useful if you reuse the handleClick
method for multiple View
s (in which case, you could inspect the id
of the View
passed to the method to determine which View
was clicked, as illustrated by Enzokie's answer).
You must include this View
parameter when defining your method even if you do not use it in your click logic. This is because reflection is used to locate the method corresponding to the name you supplied in XML, and the method name, parameter count, and parameter types are all required to uniquely define a method in Java. Check out this section of the View
source code to see exactly how this reflective lookup works!
Upvotes: 3
Reputation: 7415
This is because you might want to use your handleClick
method for 2 or more Buttons in your XML.
<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"/>
In that case it could be unclear which button triggers the callback. The View v
helps you identify that e.g.
public void handleClick(View v) {
if (v.getId() == R.id.button1) {
} else if(v.getId() == R.id.button2) {
}
}
Upvotes: 6
Reputation: 39
The View v is the object of your xml file which is referred in your onCreate method. To refer any component from xml you have to use v to gets its id of the component.
Condition
You have give id to the component in xml if you want to use onClick in your class file.
Upvotes: 1