Possible Duplicate:
Difference between OnClick() event and OnClickListener?
I'm semi-new to Android development and when I first started I tried to avoid using the xml layout by any means necessary so some of my earlier projects involve buttons that explicitly create an OnClickListener and implement it as an anonymous inner class. Such as -
final Button button = new Button(this); button.setText("Click to change second line of text"); OnClickListener buttonListener = new View.OnClickListener() { boolean clicked = false; int numClicks = 0; @Override public void onClick(View v) { if(numClicks > 5) { button.setText("STOP IT"); } numClicks++; if(clicked == false){ clicked = true; tv2.setText("Text Changed on Button Click"); } else { clicked = false; tv2.setText("Click again"); } } }; button.setOnClickListener(buttonListener);
But as I got more familiar with android, I began to understand the value of the xml layouts and implemented buttons like this
<Button android:id="@+id/button1" android:layout_height = "wrap_content" android:layout_width ="wrap_content" android:text = "lets do this" android:onClick = "DoIt" />
In the layout xml, where DoIt was defined in the java.
My question is, are these 2 methods functionally the same thing? Is there an OnClickListener being defined by the compiler somewhere behind the scenes? Are there any features you trade off by using one way or the other?
OnClickListener is an interface, which defines the onClick(View) method. If you have a class which intends to listen for clicks, you should both implement the interface (if not already extending a class that does), and implement this method too. You have to use both; they're not somehow alternatives.
In Android, the OnClickListener() interface has an onClick(View v) method that is called when the view (component) is clicked. The code for a component's functionality is written inside this method, and the listener is set using the setOnClickListener() method.
Using an OnClickListener There are two ways to do this event handler programmatically : Implementing View. OnClickListener in your Activity or fragment.
View.OnClickListener is an interface, you don't call it, but creates a new instance of it ( new View.OnClickListener() is a call to the constructor) The instance you create is of anonymous class that implements View.OnClickListener , in the brackets right under new View.OnClickListener()
These are exactly the same. android:onClick
was added in API level 4 to make it easier, more Javascript-web-like, and drive everything from the XML. What it does internally is add an OnClickListener
on the Button, which calls your DoIt
method.
Here is what using a android:onClick="DoIt"
does internally:
Button button= (Button) findViewById(R.id.buttonId); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DoIt(v); } });
The only thing you trade off by using android:onClick
, as usual with XML configuration, is that it becomes a bit more difficult to add dynamic content (programatically, you could decide to add one listener or another depending on your variables). But this is easily defeated by adding your test within the DoIt
method.
using XML, you need to set the onclick listener yourself. First have your class implements OnClickListener
then add the variable Button button1;
then add this to your onCreate()
button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(this);
when you implement OnClickListener you need to add the inherited method onClick()
where you will handle your clicks
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With