【问题标题】:Using Switch Statement to Handle Button Clicks使用 Switch 语句处理按钮点击
【发布时间】:2011-06-26 15:18:45
【问题描述】:

我正在尝试围绕视图、侦听器等进行思考。我有一个带有 2 个按钮的 Activity:buttonplay 和 buttonstop。我的问题是我无法完全围绕 Views 和 Listeners 来生成有效的 switch 语句。

例如,我想创建一个 SINGLE Listener 并以某种方式使用它来确定单击了哪个按钮。然后以某种方式使用在我的 switch 语句中单击的按钮的 ID,但是我在网上找到的所有内容似乎都对每个按钮使用 SEPARATE 侦听器,然后以某种方式使用 View 作为 Switch 语句的参数。

我意识到下面的代码不正确,但我正在寻找我需要进行哪些更改才能完成上述操作。

我想根据单击的按钮来控制 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 的方式。

【问题讨论】:

    标签: android button listener


    【解决方案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

    【讨论】:

    • May 一直是我一直在寻找的......不过有一个问题:我的课程是我的 APK 中的第三个活动,所以我已经将它定义为:公共课程Activity3 扩展了 Activity,因为它是一个单独的活动。我可以在这个 Activity 类中使​​用实现吗?
    • @user615525 是的,您应该可以将其声明为:public class Activity3 extends Activity implements OnClickListener
    【解决方案2】:

    只需更改类(我想它是主 Activity)以实现 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-hNlTD1H0。这对初学者有好处。

    【讨论】:

      【解决方案3】:

      我发现最简单的方法是为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;
          }
        }
      

      【讨论】:

        【解决方案4】:

        您好,使用开关盒在按钮之间进行切换非常简单:-

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

        【讨论】:

          【解决方案5】:

          我做的一个错误是在主类声明中没有包括“实现 OnClickListener”。这是一个示例代码,用于清楚地说明在单击期间使用 switch case。代码根据按下的按钮更改背景颜色。 希望这会有所帮助。

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

          【讨论】:

            【解决方案6】:

            我使用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语句通过

            【讨论】:

              【解决方案7】:
                  XML CODE FOR TWO BUTTONS  
                   <Button
                          android:id="@+id/btn_save"
                          android:layout_width="match_parent"
                          android:layout_height="wrap_content"
                          android:text="SAVE"
                          android:onClick="process"
                          />
                      <Button
                          android:id="@+id/btn_show"
                          android:layout_width="match_parent"
                          android:layout_height="wrap_content"
                          android:text="SHOW"
                          android:onClick="process"/> 
              
                Java Code
               <pre> public void process(View view) {
                          switch (view.getId()){
                              case R.id.btn_save:
                                //add your own code
                                  break;
                              case R.id.btn_show:
                                 //add your own code
                                  break;
                          }</pre>
              

              【讨论】:

              • 这如何解决问题?一点解释确实可以改善您的答案。
              【解决方案8】:

              我认为你错过的一件事是你没有声明停止按钮 b2,你只声明并初始化了 b1。

              【讨论】:

              • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
              猜你喜欢
              • 2021-08-18
              • 1970-01-01
              • 1970-01-01
              • 2015-08-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-01-24
              相关资源
              最近更新 更多