画面には 4 つのボタンが表示されます。ボタンを押すと、メディア プレーヤーがサウンドを再生します。私が抱えている問題は、同時にすべてのボタンに 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 );
}