web-dev-qa-db-de.com

Verwenden der Switch-Anweisung zum Verarbeiten von Schaltflächenklicks

Ich versuche, meinen Kopf um Ansichten, Hörer usw. zu wickeln. Ich habe eine Aktivität mit 2 Tasten: Buttonplay und Buttonstop. Mein Problem ist, dass ich den Views und Listener nicht vollständig genug umwickeln kann, um eine funktionierende Switch-Anweisung zu generieren.

Zum Beispiel würde ich gerne einen SINGLE Listener erstellen und ihn irgendwie verwenden, um zu bestimmen, welche Schaltfläche angeklickt wird. Dann verwenden Sie irgendwie die ID der Schaltfläche, die in meiner switch-Anweisung angeklickt wurde. Aber alles, was ich online finde, verwendet für jede Schaltfläche die Option SEPARATE-Listener und dann irgendwie die Ansicht als Argument für die switch-Anweisung.

Ich weiß, dass der unten stehende Code nicht korrekt ist, aber ich suche nach den Änderungen, die ich zur Durchführung des obigen Vorgangs benötigen würde.

Ich möchte den MediaPlayer abhängig davon steuern, auf welche Schaltfläche geklickt wird. Ich habe:

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

Letztendlich möchte ich, dass die Schaltfläche, die angeklickt wird, am einfachsten ist. Ich glaube, ein großer Teil meiner Verwirrung beruht auf der Verwendung von onClickListeners und Views in diesem Zusammenhang.

}

12
user615525

Eine Möglichkeit, dies zu erreichen, besteht darin, Ihre Klasse OnClickListener implementieren zu lassen und sie dann wie folgt zu Ihren Schaltflächen hinzuzufügen:

Beispiel:

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

Weitere Informationen finden Sie unter Android-Entwickler> Behandeln von UI-Ereignissen .

37
dogbane

Ändern Sie einfach die Klasse (ich nehme an, es ist die Hauptaktivität), um View.OnClickListener zu implementieren, und fügen Sie in der onClick-Methode die allgemeinen onClick-Aktionen ein, die Sie setzen möchten:

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

}}

Ich habe es aus diesem Video entnommen: http://www.youtube.com/watch?v=rm-hNlTD1H0 . Es ist gut für den Anfang.

6
user614538

Hallo, es ist ziemlich einfach, zwischen Schaltern mit dem Schaltergehäuse umzuschalten: -

 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

Ich habe festgestellt, dass der einfachste Weg, dies zu tun, darin besteht, onClick für jede Schaltfläche in der XML-Datei festzulegen

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

und dann können Sie einen Schalterfall so machen

  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

Ein Fehler bestand darin, dass "OnClickListener" nicht in die Hauptklassendeklaration aufgenommen wurde. Dies ist ein Beispielcode, der die Verwendung des Switch-Falls während des Klickens veranschaulicht. Der Code ändert die Hintergrundfarbe entsprechend der gedrückten Taste. Hoffe das hilft.

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

Ich verwende Butterknife mit Switch-Case, um diese Art von Fällen zu behandeln:

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

            }
        }

Die Sache ist jedoch, dass es keinen Standardfall gibt und die switch-Anweisung durchkommt

0