2010-09-15 14 views
6

Na ekranie wyświetlane są cztery przyciski. Po naciśnięciu przycisku odtwarzacz multimedialny odtwarza dźwięk. Problem, który mam, polega na tym, że wdrażam setClickable dla wszystkich przycisków w tym samym czasie.Android. Jak ustawić wszystkie przyciski, które można klikać lub klikać w tym samym czasie za pomocą metody setClickable?

Po kliknięciu przycisku chcę, aby wszystkie przyciski były niemożliwe do skasowania, dopóki odtwarzacz multimedialny nie zakończy odtwarzania dźwięku związanego z kliknięciem przycisku. Następnie chcę, aby wszystkie przyciski były ponownie ustawione, aby można je było kliknąć.

Kod działa poprawnie, dopóki nie włączę kodu setClickable - kod dla buttonOne jest wyłączony w poniższym przykładzie kodu. Telefon testowy blokuje się i mówi, że aplikacja się zatrzymała i próbuje ponownie.

Niestety, bez funkcji setClickable, użytkownik może nacisnąć dowolny przycisk i usłyszeć dowolny dźwięk przed zakończeniem odtwarzania pierwszego wybranego dźwięku.

Dziękuję za poświęcony czas i pomoc.

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

    } 

Odpowiedz

4

myślę własnością szukasz byłyby setEnabled (zestaw z Boolean)

jakiś kod;

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

dziękuję za szybką odpowiedź. Spróbuję tego. – John

+0

Dziękuję Damon. – John

+0

Użyłem twojej techniki metody stanu boolowskiego - użyłem metody setClickable w metodzie, ponieważ używałem metody myClickHandler. – John

1

Jeśli chcesz wyłączyć przycisk użyć metody setEnabled (false) w widoku klasy

Powiązane problemy