web-dev-qa-db-fra.com

Utilisation de l'instruction Switch pour gérer les clics de bouton

J'essaie de comprendre les vues, les auditeurs, etc. J'ai une activité avec 2 boutons: le jeu de boutons et la butée. Mon problème est que je ne parviens pas à comprendre suffisamment les vues et les auditeurs pour générer une instruction de commutation fonctionnelle.

Par exemple, j'aimerais créer un écouteur SINGLE et l'utiliser d'une manière ou d'une autre pour déterminer le bouton sur lequel vous cliquez. Ensuite, utilisez d’une manière ou d’une autre l’ID du bouton sur lequel vous avez cliqué dans mon instruction Switch, mais tout ce que je trouve en ligne semble utiliser des écouteurs SEPARATE pour chaque bouton, puis utiliser en quelque sorte la vue comme argument de l’instruction Switch.

Je me rends compte que le code ci-dessous n'est pas correct, mais je recherche les changements nécessaires pour accomplir les tâches ci-dessus.

Je souhaite contrôler le MediaPlayer en fonction du bouton sur lequel l'utilisateur a cliqué. J'ai:

   Button b1 = (Button) findViewById(R.id.buttonplay);       
    b1.setOnClickListener(new View.OnClickListener()         
    {

        public void onClick(View v) {
           // Perform action on click
          switch(v.getId()) {
          case R.id.buttonplay:
          //Play voicefile
          MediaPlayer.create(getBaseContext(), R.raw.voicefile).start();
          break;
          case R.id.buttonstop:
          //Stop MediaPlayer
              MediaPlayer.create(getBaseContext(), R.raw.voicefile).stop();
          break;
         }
   }
    });

En fin de compte, j'aimerais que le moyen le plus direct d'activer le bouton sur lequel vous cliquez. Je crois qu'une grande partie de ma confusion provient de la façon dont onClickListeners et Views sont utilisés dans ce contexte.

}

12
user615525

Un moyen d'y parvenir est de faire en sorte que votre classe implémente OnClickListener, puis l'ajoute à vos boutons comme suit:

Exemple:

//make your class implement OnClickListener
public class MyClass implements OnClickListener{

        ...

        //Create your buttons and set their onClickListener to "this"
        Button b1 = (Button) findViewById(R.id.buttonplay);   
        b1.setOnClickListener(this);

        Button b2 = (Button) findViewById(R.id.buttonstop);   
        b2.setOnClickListener(this);

        ...

        //implement the onClick method here
        public void onClick(View v) {
           // Perform action on click
          switch(v.getId()) {
            case R.id.buttonplay:
              //Play voicefile
              MediaPlayer.create(getBaseContext(), R.raw.voicefile).start();
              break;
            case R.id.buttonstop:
              //Stop MediaPlayer
              MediaPlayer.create(getBaseContext(), R.raw.voicefile).stop();
              break;
          }
       }
}

Pour plus d'informations, voir Développeurs Android> Gestion des événements d'interface utilisateur .

37
dogbane

Changez simplement la classe (je suppose que c'est l'activité principale) pour implémenter View.OnClickListener et sur la méthode onClick, mettez les actions générales onClick que vous voulez mettre:

public class MediaPlayer extends Activity implements OnClickListener {

@Override
public void onCreate(Bundle savedInstanceState) {
    Button b1 = (Button) findViewById(R.id.buttonplay);       
    b1.setOnClickListener(this);
    //{YOUR APP}
}


@Override
public void onClick(View v) {
    // Perform action on click
    switch(v.getId()) {
    case R.id.buttonplay:
        //Play voicefile
        MediaPlayer.create(getBaseContext(), R.raw.voicefile).start();
        break;
    case R.id.buttonstop:
        //Stop MediaPlayer
        MediaPlayer.create(getBaseContext(), R.raw.voicefile).stop();
        break;
    }

}}

Je l'ai tiré de cette vidéo: http://www.youtube.com/watch?v=rm-hNlTD1H0 . C'est bon pour les débutants.

6
user614538

Salut c'est assez simple pour faire basculer entre les boutons en utilisant le cas commutateur:

 package com.example.browsebutton;


    import Android.app.Activity;
    import Android.os.Bundle;
    import Android.view.View;
    import Android.view.View.OnClickListener;
    import Android.widget.Button;
    import Android.widget.Toast;

        public class MainActivity extends Activity implements OnClickListener {
        Button b1,b2;
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                b1=(Button)findViewById(R.id.button1);

                b2=(Button)findViewById(R.id.button2);
                b1.setOnClickListener(this);
                b2.setOnClickListener(this);
            }



            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                 int id=v.getId();
                 switch(id) {
                    case R.id.button1:
                  Toast.makeText(getBaseContext(), "btn1", Toast.LENGTH_LONG).show();
                //Your Operation

                  break;

                    case R.id.button2:
                          Toast.makeText(getBaseContext(), "btn2", Toast.LENGTH_LONG).show();


                          //Your Operation
                          break;
            }

        }}
4
Naveen Kant Mishra

J'ai trouvé que le moyen le plus simple de le faire est de définir onClick pour chaque bouton du fichier XML.

<Button
Android:id="@+id/vrHelp"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/ic_menu_help"
Android:onClick="helpB" />

et alors vous pouvez faire un cas de commutation comme celui-ci

  public void helpB(View v) {
    Button clickedButton = (Button) v;
    switch (clickedButton.getId()) {
      case R.id.vrHelp:
        dosomething...
        break;

      case R.id.coHelp:
        dosomething...
        break;

      case R.id.ksHelp:
        dosomething...
        break;

      case R.id.uHelp:
        dosomething...
        break;

      case R.id.pHelp:
        dosomething...
        break;
    }
  }
3
7wonders

Une erreur que j'ai faite était de ne pas inclure "implémente OnClickListener" dans la déclaration de classe principale. Ceci est un exemple de code pour illustrer clairement l’utilisation du boîtier de commutateur lors d’un clic. Le code change la couleur de fond selon le bouton enfoncé. J'espère que cela t'aides.

public class MainActivity extends Activity  implements OnClickListener{


TextView displayText;
Button cred, cblack, cgreen, cyellow, cwhite;
LinearLayout buttonLayout;

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    cred = (Button) findViewById(R.id.bred);
    cblack = (Button) findViewById(R.id.bblack);
    cgreen = (Button) findViewById(R.id.bgreen);
    cyellow = (Button) findViewById(R.id.byellow);
    cwhite = (Button) findViewById(R.id.bwhite);
    displayText = (TextView) findViewById(R.id.tvdisplay);
    buttonLayout = (LinearLayout) findViewById(R.id.llbuttons);

    cred.setOnClickListener(this);
    cblack.setOnClickListener(this);
    cgreen.setOnClickListener(this);
    cyellow.setOnClickListener(this);
    cwhite.setOnClickListener(this);
}

@Override
protected void onClick(View V){
    int id=V.getId();
    switch(id){
    case R.id.bred:
        displayText.setBackgroundColor(Color.rgb(255, 0, 0));
        vanishLayout();
        break;
    case R.id.bblack:
        displayText.setBackgroundColor(Color.rgb(0, 0, 0));
        vanishLayout();
        break;
    case R.id.byellow:
        displayText.setBackgroundColor(Color.rgb(255, 255, 0));
        vanishLayout();
        break;
    case R.id.bgreen:
        displayText.setBackgroundColor(Color.rgb(0, 255, 0));
        vanishLayout();
        break;
    case R.id.bwhite:
        displayText.setBackgroundColor(Color.rgb(255, 255, 255));
        vanishLayout();
        break;
    }
}
3
mkndsps

J'utilise Butterknife avec interrupteur pour traiter ce genre de cas:

    @OnClick({R.id.button_bireysel, R.id.button_kurumsal})
        public void onViewClicked(View view) {
            switch (view.getId()) {


                case R.id.button_bireysel:
 //Do something

                    break;
                case R.id.button_kurumsal:

     //Do something

                    break;

            }
        }

Mais la chose est qu'il n'y a pas de cas par défaut et l'instruction switch tombe à travers

0
Ege Kuzubasioglu