I'm asking this a little because im intrested and mostly because im afraid to use properties\code that I don't understand. From what I understand all events in java work by implementing a listener inteface thats appropriate to the event. What will happen if I implement onClick in my activity for 2 buttons and for the third define a method with the android:onClick="..." property? I found this article, so after reading it I understand that its probebly implemented using a anonymous class that implements the OnClickListener, but I'd like to be sure\know more about it, and in what way I might break something\ use this knowledge to my advantege? the android reference isn't clear about how it works,,,
Asked
Active
Viewed 708 times
2 Answers
8
It uses reflection to figure out the method to call at runtime. It's a view's property, so the View has the relevant code which looks if this property is set, and then figure out the method name on the activity and triggers it.
View is always bound to a specific activity's context, and so, is able to call this public method through reflection.
You can see the source code of the view class here. You can see line number 2003, where this situation is being handled.

Kumar Bibek
- 9,016
- 2
- 39
- 68
-
Why not? I don't see any downside to it. – Kumar Bibek Apr 05 '13 at 17:55
-
2Reflection is slow, and doesn't allow for compile time checking. – Sky Kelsey Apr 05 '13 at 17:57
-
You are not doing a lot of things here. And it happens in the runtime. IT wouldn't slow down your application so much that you should worry about it. – Kumar Bibek Apr 05 '13 at 17:59
-
1The amount of things being done here is irrelevant. It's slower than making your own click handler, and once again, there is no compile time checking. – Sky Kelsey Apr 05 '13 at 18:01
-
How does custom name space work with a views reflection? Since the namespace var can't exist in the view class? (unless it's extended?) – Oliver Dixon Aug 25 '15 at 13:07
1
To answer your question in a simpler manner, the name you specify here is a public method in the Activity that loaded that layout. That method must take a single arguement of type View.
Such as:
android:onClick="myMethod"
public void myMethod(View view) {
}

Sky Kelsey
- 19,192
- 5
- 36
- 77