Il y a quatre façons d'utiliser OnClickListener
.
Premier moyen
Pour définir OnClickListener
dans le site d'appel de la méthode.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = findViewById(R.id.myButton);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// do something
}
});
}
}
La première raison pour laquelle il faut éviter cela est que cela encombre onCreate
méthode. Cela devient encore plus évident lorsque vous voulez observer les événements de clics de plusieurs vues.
La raison suivante pour éviter cela est que cela ne favorise pas la réutilisation du code si plusieurs boutons doivent faire la même chose.
Deuxième voie
La deuxième méthode est presque la même que la première, sauf que l'implémentation dans le champ est assignée dans la classe.
public class MainActivity extends AppCompatActivity {
private View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = findViewById(R.id.myButton);
button.setOnClickListener(clickListener);
}
}
Cette méthode est à peu près la même que la première, le seul avantage étant que la méthode peut être réutilisée pour plusieurs boutons.
Troisième voie
Cette façon de faire consiste à déclarer une classe interne pour implémenter OnClickListener
. Si elle doit être utilisée plusieurs fois, il est préférable de définir l'instance comme un champ.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = findViewById(R.id.myButton);
button.setOnClickListener(new ButtonClick());
}
class ButtonClick implements View.OnClickListener {
@Override
public void onClick(View v) {
// do something
}
}
}
L'avantage de cette méthode est qu'elle permet d'organiser le code. Vous pouvez facilement réduire cette classe interne et l'oublier jusqu'à ce que vous ayez besoin de la consulter.
L'autre bonne raison est qu'il pourrait être transformé en classe publique et réutilisé dans d'autres domaines d'application.
Quatrième voie
La quatrième voie consiste à mettre en œuvre des activités OnClickListener
.
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = findViewById(R.id.myButton);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// do something
}
}
Le premier inconvénient de cette méthode est qu'elle crée une méthode publique dans l'activité et que vous devez y passer this
activité lorsque setOnClickListener
s'appelle.
La deuxième raison d'éviter cette méthode est que si un autre bouton est ajouté, vous devez déterminer quel bouton a été cliqué. Vous devez alors utiliser switch()
ou if()
déclarations. Il n'est pas exécuté parce qu'il gaspille un cycle ou plusieurs pour chaque clic de bouton.
Le dernier inconvénient de cette méthode est qu'il est difficile d'organiser une classe. Par exemple, vous avez une activité qui implémente plusieurs interfaces. Soudainement, toutes les méthodes de ces interfaces sont entrelacées ensemble, ce qui devient plus évident après avoir ajouté des méthodes à certaines de ces interfaces. De plus, vous ne pouvez plus ajouter une interface avec une méthode nommée onClick
.
Il y a quelques différences entre ces méthodes, mais vous devez choisir votre méthode en fonction de votre code et de vos besoins.