web-dev-qa-db-ja.com

Switchステートメントを使用してボタンクリックを処理する

ビュー、リスナーなどに頭を包み込もうとしています。ボタンプレイとボタンストップの2つのボタンを持つアクティビティがあります。私の問題は、有効なswitchステートメントを生成するのに十分なほどビューとリスナーを完全にラップできないことです。

たとえば、SINGLE Listenerを作成し、それを使用してどのボタンがクリックされたかを判断したいと思います。次に、switchステートメントでクリックされたボタンのIDを何らかの方法で使用しますが、オンラインで見つけたすべてのものはすべてのボタンにSEPARATEリスナーを使用し、Switchステートメントの引数としてViewを使用しているようです。

以下のコードは正しくないことを認識していますが、上記を達成するために必要な変更を探しています。

どのボタンがクリックされたかに応じて、MediaPlayerを制御します。私が持っています:

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

最終的には、クリックされたボタンをオンにする最も簡単な方法が欲しいです。私の混乱の大部分は、このコンテキストでのonClickListenersとViewsの使用方法に起因すると考えています。

15
user615525

これを実現する1つの方法は、クラスにOnClickListenerを実装し、次のようにボタンに追加することです。

例:

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

詳細については、「 Android Developers> Handling UI Events 」を参照してください。

41
dogbane

クラスを変更して(これがメインアクティビティであると仮定して)View.OnClickListenerを実装し、onClickメソッドに配置する一般的なonClickアクションを配置します。

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

}}

このビデオからそれを取りました: http://www.youtube.com/watch?v=rm-hNlTD1H 初心者に適しています。

6
user614538

こんにちは、スイッチケースを使用してボタンを切り替えるのは非常に簡単です:-

 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

これを行う最も簡単な方法は、xmlの各ボタンにonClickを設定することです

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

そして、あなたはこのようなスイッチケースを行うことができます

  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

私がしたことの1つの間違いは、メインクラスの宣言に「OnClickListenerの実装」を含めなかったことです。これは、クリック時のスイッチケースの使用を明確に示すサンプルコードです。コードは、押されたボタンごとに背景色を変更します。お役に立てれば。

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

Butterknife をswitch-caseとともに使用して、この種のケースを処理します。

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

            }
        }

ただし、デフォルトのケースはなく、switchステートメントは失敗します

0