Android setOnClickListener-methode – Hoe werkt het?

Ik heb problemen met het begrijpen van deze code. Ik begrijp dat findViewByIdde knopwidget zal krijgen en dan zal casten. Vervolgens gaat het de knop gebruiken om de methode setOnClickListeneraan te roepen. Ik weet echter niet wat dat argument is dat wordt doorgegeven aan de setOnClickListeneren ik heb nog nooit zo’n code gezien. Hoe komt het dat het een nieuw object creëert, maar in staat is om een ​​eigen methode te creëren binnen het argument van een andere methode? Zou fijn zijn als iemand dat zou kunnen uitleggen. En welk type object neemt de methode setOnClickListenerop?

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));
    }
});

Antwoord 1, autoriteit 100%

Het werkt als volgt. View.OnClickListenere is gedefinieerd –

public interface OnClickListener {
    void onClick(View v);
}

Voor zover we weten kunt u een object OnClickListenerniet instantiëren, omdat er geen methode voor is geïmplementeerd. Er zijn dus twee manieren waarop u kunt gaan – u kunt deze interface implementeren die de onClick-methode als volgt overschrijft:

public class MyListener implements View.OnClickListener {
    @Override
    public void onClick (View v) {
         // your code here;
    }
}

Maar het is vervelend om dit elke keer te doen omdat je een kliklistener wilt instellen. Dus om dit te voorkomen, kunt u ter plekke de implementatie van de methode leveren, net zoals in een voorbeeld dat u gaf.

setOnClickListenerneemt View.OnClickListenerals parameter.


Antwoord 2, autoriteit 46%

Dit is de beste manier om Onclicklistener te implementeren voor veel knoppen op een rij
Implementeer View.onclicklistener.

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

Dit is een knop in de MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bt_submit = (Button) findViewById(R.id.submit);
    bt_submit.setOnClickListener(this);
}

Dit is een overschrijfmethode

   @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.submit:
                //action
                break;
            case R.id.secondbutton:
                //action
                break;
        }
    }

Antwoord 3

Dat wat de handleiding zegtover setOnClickListenermethode is:

public void setOnClickListener (View.OnClickListener l)

Toegevoegd in API-niveau 1 Registreer een callback die moet worden aangeroepen bij deze weergave
wordt geklikt. Als deze weergave niet klikbaar is, wordt deze wel klikbaar.

Parameters

l View.OnClickListener: de callback die wordt uitgevoerd

En normaal gesproken moet je het zo gebruiken

public class ExampleActivity extends Activity implements OnClickListener {
    protected void onCreate(Bundle savedValues) {
        ...
        Button button = (Button)findViewById(R.id.corky);
        button.setOnClickListener(this);
    }
    // Implement the OnClickListener callback
    public void onClick(View v) {
      // do something when the button is clicked
    }
    ...
}

Bekijk deze les ook

LEAVE A REPLY

Please enter your comment!
Please enter your name here

eighteen + 1 =

Other episodes