I have trouble understanding this code. I get that findViewById
will get the button widget and then it'll cast it. Then, it's going to use the button to call the setOnClickListener
method. However, I don't know what is that argument being passed into the setOnClickListener
and I have never seen code like that before. How is it that it creates a new object but is able to create a method of its own within another method's argument? Would be great if someone could explain that. Also, what type of object is the setOnClickListener
method taking in?
btn = (Button)findViewById(R.id.firstButton);
btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
tv.setText(months[rand.nextInt(12)]);
tv.setTextColor(Color.rgb(rand.nextInt(255)+1, rand.nextInt(255)+1, rand.nextInt(255)+1));
}
});
This is the best way to implement Onclicklistener for many buttons in a row implement View.onclicklistener.
This is a button in the MainActivity
This is an override method
It works like this. View.OnClickListenere is defined -
As far as we know you cannot instantiate an object
OnClickListener
, as it doesn't have a method implemented. So there are two ways you can go by - you can implement this interface which will overrideonClick
method like this:But it's tedious to do it each time as you want to set a click listener. So in order to avoid this you can provide the implementation for the method on spot, just like in an example you gave.
setOnClickListener
takesView.OnClickListener
as its parameter.That what manual says about
setOnClickListener
method is:Parameters
And normally you have to use it like this
Take a look at this lesson as well Building a Simple Calculator using Android Studio.