J'ai commencé à programmer un peu sous Android, j'ai 3 boutons en une seule activité.
J'ai vu quelques exemples de codes qui affectent le même événement OnClick
à tous les boutons (même s'ils effectuent une action complètement différente) et dans la méthode Switch(id)
case case case ...
Quelle est la meilleure approche? une onClick
méthode et commutation ou beaucoup de méthodes, une pour chaque bouton?
Merci.
Si vous voulez réduire les lignes de codage, utilisez View's OnClick() with switch statement
et si vous souhaitez gérer séparément tous les clics (pour comprendre et maintenir facilement le code), puis utilisez tous les button's onClick().
séparément
Mise à jour:
Si vous avez déclaré des boutons dans votre fichier xml de mise en page d'activité, écrivez l'attribut Android:onClick=""
avec le même nom de méthode pour tous les boutons et implémentez cette méthode dans votre activité. Maintenant, vous avez une méthode pour tous les boutons et dans cette méthode, différenciez les boutons avec id.
Exemple:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >
<Button Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:onClick="buttonOnClick"
Android:layout_height="wrap_content"
Android:text="Hello, I am a Button 1" />
<Button Android:id="@+id/button2"
Android:layout_width="wrap_content"
Android:onClick="buttonOnClick"
Android:layout_height="wrap_content"
Android:text="Hello, I am a Button 2" />
<Button Android:id="@+id/button3"
Android:layout_width="wrap_content"
Android:onClick="buttonOnClick"
Android:layout_height="wrap_content"
Android:text="Hello, I am a Button 3" />
</LinearLayout>
Maintenant, dans votre activité, implémentez buttonOnClick
comme,
public void buttonOnClick(View view)
{
switch(view.getId())
{
case R.id.button1:
// Code for button 1 click
break;
case R.id.button2:
// Code for button 2 click
break;
case R.id.button3:
// Code for button 3 click
break;
}
}
Ou vous pouvez appliquer le même cas de commutateur pour les boutons ajoutés dynamiquement dans votre activité, comme au lieu de buttonOnClick
vous devez utiliser implémenté OnClickListerner de ViewonClick
.
Utilisez de cette façon:
@Override
public void onCreate(Bundle savedInstanceState) {
button1.setOnClickListener(onClickListener);
button2.setOnClickListener(onClickListener);
button3.setOnClickListener(onClickListener);
}
private OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button1:
//DO something
break;
case R.id.button2:
//DO something
break;
case R.id.button3:
//DO something
break;
}
}
};
this.btnAddFriedtoFacebook = (Button) this.findViewById(R.id.btnAddFriedtoFacebook);
this.btnAddFriedtoFacebook.setOnClickListener(this.backButtonClickListener);
public OnClickListener backButtonClickListener = new OnClickListener()
{
public void onClick(final View view)
{
if (view == MatchInfoActivity.this.btnBack)
{
MatchInfoActivity.this.finish();
}
if( view == MatchInfoActivity.this.btnAddFried){
Intent i = new Intent(Intent.ACTION_VIEW);
MatchInfoActivity.this.startActivity(i);
}
if( view == MatchInfoActivity.this.btnAddBuddy){
Intent i = new Intent(Intent.ACTION_VIEW);
MatchInfoActivity.this.startActivity(i);
}
}
};
Voici la bonne voie.
Je pense que l'enregistrement de onClick
en xml (layout) est une meilleure approche.
ÉDITER:
Sujets associés trouvés:
Petit ajout à la réponse @Nguyen.
findViewById(R.id.buttonOne).setOnClickListener(buttonClickListener);
.... .... .... ....
findViewById(R.id.buttonN).setOnClickListener(buttonClickListener);
private View.OnClickListener buttonClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.buttonOne:
// do something
break;
.... .... .... ....
case R.id.buttonN:
// do something
break;
}
}
};
Cela peut être utile si vous ne souhaitez pas initialiser la variable de bouton, mais souhaitez suivre l'événement de clic de bouton. Merci!
Événement onClick enregistré dans la présentation XML, puis gérez-le dans le code. Voici comment je le ferais:
<Button
Android:id="@+id/btplus"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Click me"
Android:onClick="onBtnClicked">
Méthode en .class
public void onBtnClicked(View v) {
switch (v.getId()) {
case R.id.btplus:
Toast.makeText(getApplicationContext(), "Plus is clicked" + "+", Toast.LENGTH_SHORT).show();
break;
case R.id.btminu:
Toast.makeText(getApplicationContext(),"Minus is clicked" + "-", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}