2010-09-15 9 views
6

La pantalla muestra cuatro botones. Cuando se presiona un botón, un reproductor de medios reproduce un sonido. El problema que tengo es implementar setClickable para todos los botones al mismo tiempo.Android. ¿Cómo configuro todos los botones haciendo clic o no haciendo clic al mismo tiempo usando setClickable?

Una vez que se hace clic en un botón, quiero que no se puedan hacer clic en todos los botones hasta que el reproductor de medios termine de reproducir el sonido asociado con el clic del botón. Luego quiero que todos los botones se vuelvan a hacer clic.

El código funciona bien hasta que active el código setClickable - el código para buttonOne está deshabilitado en mi ejemplo de código a continuación. El teléfono de prueba se bloquea y me dice que la aplicación se ha detenido y vuelve a intentarlo.

Desafortunadamente, sin setClickable, el usuario puede presionar cualquier botón y escuchar cualquier sonido antes de que el primer sonido seleccionado termine de reproducirse.

Gracias por su tiempo y ayuda.

import android.app.Activity; 
import android.app.AlertDialog; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.widget.ImageButton; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 


public class hipsterdoofus extends Activity 
{ 
private int asoundfilenumber;//integer id of sound file to be played 

public ImageButton buttonOne; 
public ImageButton buttonTwo; 
public ImageButton buttonThree; 
public ImageButton buttonFour; 


public void myClickHandler(View v) { 



    switch (v.getId()) 
     { 

     case R.id.buttonOne: 
     asoundfilenumber=0x7f040000; 
     break; 

     case R.id.buttonTwo: 
     asoundfilenumber=0x7f040001; 
     break; 

     case R.id.buttonThree: 
     asoundfilenumber=0x7f040002; 
     break; 

     case R.id.buttonFour: 
     asoundfilenumber=0x7f040003; 
     break; 



     }//closes switch test 



    freezeButtonsAndPlaySoundThenUnfreezeButtons(); 

    }//closes onClick 


    public void freezeButtonsAndPlaySoundThenUnfreezeButtons() 
{ 

    **//buttonOne.setClickable(false);//sets buttonOne to unclickable** 

    MediaPlayer mp = MediaPlayer.create(getBaseContext(), asoundfilenumber); 
    mp.start(); 


    mp.setOnCompletionListener(new OnCompletionListener()//listens for player to finish then releases player 
    { 

    @Override 
    public void onCompletion(MediaPlayer mpalmost) 
    { 
    mpalmost.release(); 
    } 



    }); 

    **//buttonOne.setClickable(true); //sets buttonOne to clickable** 

} 


public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

    } 

Respuesta

4

creo que la propiedad que está buscando se setEnabled (establecido con booleano)

algo de código;

public void enableDisableButtons(Boolean state){ 
    buttonOne.setEnabled(state); 
    buttonTwo.setEnabled(state); 
    buttonThree.setEnabled(state); 
    buttonFour.setEnabled(state); 
} 

public void freezeButtonsAndPlaySoundThenUnfreezeButtons() 
{ 
    enableDisableButtons(false); // disable buttons 

    MediaPlayer mp = MediaPlayer.create(getBaseContext(), asoundfilenumber); 
    mp.start(); 


    mp.setOnCompletionListener(new OnCompletionListener()//listens for player to finish then releases player 
    { 

     @Override 
     public void onCompletion(MediaPlayer mpalmost) 
     { 
      enableDisableButtons(true); // Re-enable buttons 
      mpalmost.release(); 
     } 
     }); 
} 
+0

gracias por su rápida respuesta. Voy a intentar esto. – John

+0

Gracias Damon. – John

+0

Utilicé su técnica de método de estado booleano. Usé setClickable dentro del método porque estaba usando el método myClickHandler. – John

1

Si desea desactivar un botón de utilizar el método setEnabled (falsa) de la clase View

Cuestiones relacionadas