开发者

View.OnClickListener, method or class?

开发者 https://www.devze.com 2023-03-26 03:55 出处:网络
sorry if this question is stupid, but I can\'t wrap my head around J开发者_JAVA百科ava syntax..I learnt C/C++

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号