2010-09-15 27 views
6

屏幕顯示四個按鈕。當按下按鈕時,媒體播放器會播放聲音。我遇到的問題是同時爲所有按鈕實現setClickable。Android。如何使用setClickable將所有按鈕同時設置爲可點擊或不可點擊?

單擊按鈕後,我希望所有按鈕都不可點擊,直到媒體播放器播放完與按鈕單擊關聯的聲音。然後,我希望所有按鈕都設置爲可點擊。

代碼運行良好,直到我啓用setClickable代碼 - 下面的代碼示例中,buttonOne的代碼被禁用。測試電話鎖定並告訴我應用程序已停止並再次嘗試。

不幸的是,在沒有setClickable的情況下,用戶可以按任意按鈕並在第一個選定的聲音播放完畢之前聽到任何聲音。

謝謝你的時間和幫助。

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

    } 

回答

4

我認爲你正在尋找的屬性將被的setEnabled(布爾套)

一些代碼;

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

的的setEnabled方法(假)感謝您的快速回復。我會試試這個。 – John 2010-09-15 15:46:51

+0

謝謝Damon。 – John 2010-09-15 17:31:28

+0

我使用了布爾狀態方法 - 我在方法內部使用了setClickable,因爲我使用的是myClickHandler方法。 – John 2010-09-15 17:32:50

1

如果要禁用按鈕中使用View類