2010-09-15 8 views
6

Lo schermo visualizza quattro pulsanti. Quando viene premuto un pulsante, un lettore multimediale riproduce un suono. Il problema che sto avendo sta implementando setClickable per tutti i pulsanti allo stesso tempo.Android. Come faccio a impostare tutti i pulsanti selezionabili o non cliccabili contemporaneamente utilizzando setClickable?

Dopo aver fatto clic su un pulsante, desidero che tutti i pulsanti siano sbloccabili fino a quando il lettore multimediale non ha terminato di riprodurre il suono associato al clic del pulsante. Quindi voglio che tutti i pulsanti siano ripristinati su cliccabili.

Il codice funziona correttamente finché non si attiva il codice setClickable: il codice per buttonOne è disabilitato nel mio esempio di codice riportato di seguito. Il telefono di prova si blocca e mi informa che l'applicazione si è fermata e riprova.

Sfortunatamente, senza setClickable, l'utente può premere qualsiasi pulsante e ascoltare qualsiasi suono prima che il primo suono selezionato sia finito.

Grazie per il vostro tempo e aiuto.

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

    } 

risposta

4

penso che la proprietà che stai cercando sarebbe setEnabled (set con booleano)

po 'di codice;

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

grazie per la risposta rapida. Ci proverò. – John

+0

Grazie Damon. – John

+0

Ho usato la tecnica del metodo dello stato booleano - Ho usato setClickable all'interno del metodo poiché stavo usando il metodo myClickHandler. – John

1

Se si desidera disabilitare un tasto utilizzare il metodo setEnabled (falsa) della classe View

Problemi correlati