2011-02-13 58 views
10

我試圖圍繞視圖,聽衆等我的頭我有一個活動2按鈕:buttonplay和buttonstop。我的問題是,我無法將自己的觀點和聽衆完全包圍起來,以產生一個可用的切換語句。使用Switch語句處理按鈕點擊

例如,我會喜歡創建一個單一的偵聽器,並以某種方式使用它來確定哪個按鈕被點擊。然後以某種方式使用在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在這種情況下使用的方式。

}實現這一目標的

回答

28

的一種方法是使你的類實現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

+0

這*月*有我一直在尋找..但有一個問題:我的課是我的APK中的第三個活動,所以我已經將它定義爲:public class Activity3 extends Activity,因爲它是一個SEPARATE活動。我可以在此Activity中使用implements類? – user615525 2011-02-13 23:54:03

4

只要改變類(我想這是最主要的活動),以實現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。這對初學者很有好處。

2

我發現,要做到這一點最簡單的方法是在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" /> 

設置的onClick爲每個按鈕,然後你可以做一個開關的情況下這樣

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

喜其使用開關盒在按鈕之間進行切換非常簡單: -

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

     }} 
3

一個錯誤,我所做的不包括在主類聲明中實現「實現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; 
    } 
} 
0

我用Butterknife帶開關情況來處理這種情況:

@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語句落空