J'ai du mal à comprendre ce code. Je reçois que findViewById
obtiendra le widget de bouton et ensuite il le lancera. Ensuite, il utilisera le bouton pour appeler la méthode setOnClickListener
. Cependant, je ne sais pas quel est cet argument qui est passé dans la setOnClickListener
et je n’ai jamais vu un code comme celui-là auparavant. Comment se fait-il qu'il crée un nouvel objet mais puisse créer sa propre méthode dans les arguments d'une autre méthode? Ce serait bien si quelqu'un pouvait expliquer ça. De plus, quel type d’objet la méthode setOnClickListener
prend-elle?
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));
}
});
Cela fonctionne comme ça. View.OnClickListenere est défini -
public interface OnClickListener {
void onClick(View v);
}
Autant que nous sachions, vous ne pouvez pas instancier un objet OnClickListener
, car aucune méthode n'est implémentée. Il y a donc deux façons de passer - 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 souhaitez définir un écouteur de clic. Donc, afin d'éviter cela, vous pouvez fournir l'implémentation de la méthode sur place, comme dans un exemple que vous avez donné.
setOnClickListener
prend View.OnClickListener
en tant que paramètre.
C'est le meilleur moyen d'implémenter Onclicklistener pour plusieurs boutons dans une ligne.
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Ceci est un bouton dans la 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);
}
Ceci est une méthode de substitution
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.submit:
//action
break;
case R.id.secondbutton:
//action
break;
}
}
Voici la méthode manuelle dit à propos de setOnClickListener
:
public void setOnClickListener (View.OnClickListener l)
Ajoutée dans l'API niveau 1 Enregistrez un rappel à appeler lorsque cette vue est affichée est cliqué. Si cette vue n'est pas cliquable, elle devient cliquable.
Paramètres
l View.OnClickListener: le rappel qui sera exécuté
Et normalement, vous devez l'utiliser comme ça
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 également un coup d'œil à cette leçon Création d'une calculatrice simple avec Android Studio .