web-dev-qa-db-fra.com

Android une méthode OnClick pour plusieurs boutons?

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.

24
Ron Gross

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.

23
user370305

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

   }
};
34
Nguyen Minh Binh
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.

6
Nik88

Je pense que l'enregistrement de onClick en xml (layout) est une meilleure approche.

ÉDITER:

Sujets associés trouvés:

  1. Meilleure pratique pour définir les événements de bouton dans Android
  2. meilleures pratiques pour gérer les événements d'interface utilisateur
2
adatapost

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!

0
Madan Sapkota

É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;
        }
    }
0
Xar E Ahmer