Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does the android Xml attribute android:onClick="..." work behind the scenes?

Tags:

java

android

xml

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,,,

like image 205
Eytan Avatar asked Jan 14 '23 17:01

Eytan


2 Answers

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.

Source code for View class

like image 170
Kumar Bibek Avatar answered Jan 31 '23 00:01

Kumar Bibek


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) {
}
like image 45
Sky Kelsey Avatar answered Jan 31 '23 00:01

Sky Kelsey