View.OnClickListener, method or class?
sorry if this question is stupid, but I can't wrap my head around J开发者_JAVA百科ava syntax..I learnt C/C++
I know View is a class which is good..but I don't understand if View.OnClickListener() is a method. I doubt it unless it returns an object? I think View is a class which has a static OnClickListener member object..again that doesn't make sense to me.. Can some explain what is happening with this line of code?button1 = (Button) findByView(R.id.button1) ;
button1.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
}
}
So what is happening with this code?
Button1
is a reference to the button1 object in the xml file.
button1
object has a member object setOnClickListener
which I from its name I assume initializes an event to the button or something. But it receives View.OnClicListener()
object.
I am confused by that..onClick receives a View object so onClickListener
is not an object returns a View object?? I don't get it at all.
Can someone explain what happens in that line View.onClickListener()
is it another way of saying new this
?
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()
Any class that implements View.OnClickListener
must implement the methods declared in it (e.g. onClick)
setOnClickListener
just saves the reference to the View.OnClickListener instance you supplied, and when someone clicks the button, the onClick
method of the listener you set is getting called.
OnClickListener is an interface. An interface provides a set of Methods other classes can implement. http://download.oracle.com/javase/tutorial/java/concepts/interface.html
You could have another class (Like and adapter), that extends OnClickListener, then your Adapter class could add the method "OnClick(View v)", and it would also be able to handle Click events. Or you could use the code you posted, where you just create an anonymous class, that implements OnClickListener.
-Woody
Android code is geared for event based responses. The block of code is as follows:
Find a button that you've added to the active layout, and assign it to a local variable:
button1 = (Button) findByView(R.id.button1);
Set the on click listener for the button. This is a class that will be invoked when the button registers an event. The class is constructed here, it is anonymous as you don't assign it to a variable, but android will keep track of the reference.
Button events are always due to being pressed, so when the button registers that it has been pressed, it will inform the onClickListener class that the even occurred, and pass itself in as the view. The onClickListener is constructed as:
new View.OnClickListener()
{
public void onClick(View v)
{
}
}
That onClick method is used by the listener to handle the event (in this case, a button press). So, you would put the code you would like executed in that method.
To answer your question directly, the onClickListere is an anonymous class that defines the onClick method, which will handle button events.
精彩评论