Android setOnClickListener méthode-comment ça marche?

J'ai du mal à comprendre ce code. Je reçois que findViewById obtiendra le widget button et ensuite il le lancera. Ensuite, il va utiliser le bouton pour appeler la méthode setOnClickListener. Cependant, je ne sais pas quel est cet argument passé dans le setOnClickListener et je n'ai jamais vu de code comme ça auparavant. Comment est-ce qu'il crée un nouvel objet mais est capable de créer une méthode propre dans l'argument d'une autre méthode? Ce serait génial si quelqu'un pouvait expliquer cela. En outre, quel type d'objet est le setOnClickListener méthode prenant en?

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));
    }
});
21
demandé sur LAD 2014-09-12 12:14:26

3 réponses

Ça marche comme ça. Vue.OnClickListenere est défini -

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

Pour autant que nous sachions, vous ne pouvez pas instancier un objet OnClickListener, car il n'a pas de méthode implémentée. Il y a donc deux façons de procéder : vous pouvez implémenter cette interface qui remplacera la méthode onClick comme ceci:

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

Mais il est fastidieux de le faire à chaque fois que vous voulez définir un écouteur de clic. Donc, pour éviter cela, vous pouvez fournir l'implémentation de la méthode sur place, tout comme dans un exemple vous donner.

setOnClickListener prend View.OnClickListener comme paramètre.

13
répondu cliffroot 2014-09-12 08:20:37

C'est la meilleure façon d'implémenter Onclicklistener pour de nombreux boutons d'affilée mettre en œuvre la Vue.onclicklistener.

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

Ceci est un bouton dans le 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);
}

C'est une méthode de remplacement

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

                break;

            case R.id.secondbutton:
                //action
                break;
        }
    }
3
répondu nafees ahmed 2018-04-25 13:56:15

Que ce manuel dit à propos de la méthode setOnClickListener est:

public void setOnClickListener (View.OnClickListener l)

Ajouté au niveau 1 de L'API, enregistrez un rappel à appeler lorsque cette vue est cliqué. Si cette vue n'est pas cliquable, elle devient cliquable.

Les Paramètres

L Vue.OnClickListener: le rappel qui s'exécutera

Et normalement vous devez l'utiliser comme ceci

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
    }
    ...
}

Jetez un oeil à cette leçon ainsi construire une calculatrice Simple en utilisant Android Studio.

0
répondu Academy of Programmer 2016-03-08 11:31:21