2011-02-13 2 views
10

뷰, 수신기 등 내 머리를 감싸려고합니다. 버튼과 단추 두 개로 된 활동이 있습니다. 내 문제는 뷰와 리스너를 완전히 감싸고있어 작동하는 switch 문을 생성 할 수 없다는 것입니다.Switch 문을 사용하여 단추 처리 클릭

예를 들어, 단일 리스너를 만들고 어쨌든 어떤 버튼을 클릭했는지 확인하는 데 사용하고 싶습니다. 그럼 어떻게 든 내 스위치 문을 클릭 한 버튼의 ID를 사용하지만, 온라인으로 찾은 모든 모든 버튼에 대한 별도의 리스너를 사용하고 어떻게 든 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; 
     } 
    } 
    }); 

궁극적으로 나는 가장 stighforward 방법은 어떤 버튼을 클릭했는지 전환하고 싶습니다. 내 혼란의 큰 부분은 onClickListeners 및 Views가이 컨텍스트에서 사용되는 방식에서 비롯된 것이라고 생각합니다.

예 :

//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를 참조

}이 달성의

답변

28

한 가지 방법은 클래스가 OnClickListener를 구현하고이처럼 버튼에 추가하는 것입니다.

+0

이 * 월 *이를 통해 문 폭포 전환 내가 뭘 찾고 있었는지 .. 한 가지 질문 : 내 수업은 내 APK에서 세 번째 활동이므로 이미 정의 : public class Activity3 그것은 별도의 활동이므로 활동을 확장합니다.이 활동에서 도구를 사용할 수 있습니까? 수업? – user615525

+0

@ user615525 네, 그것을 선언 할 수 있어야합니다 :'public class Activity3 extends Activity extends OnClickListener' – dogbane

4

는 그냥 클래스를 변경 (나는 그것이 주요 활동이다 가정) View.OnClickListener을 구현하고 온 클릭 방식에 일반 온 클릭 동작은 당신이 데려 가고 싶다는 넣어 :

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

하나의 실수는 내가 포함하지 않은 것이었다. ing "은 메인 클래스 선언에서"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; 

      } 
     } 

을하지만 일이 디폴트의 경우가되지 않고

관련 문제