2012-11-15 2 views
7

私はボタンを持っています。それを押すと、オーディオファイルが再生されます。ボタンに5秒間の遅延をかけて、ユーザーがボタンをマッシュして音を繰り返し再生しないようにしたい。私はそれがプッシュされた後、ボタンが5秒間無効にされることを本当に望んでいると思います。誰もこれを行う方法を知っていますか?ボタンのあなたのonClickListenerでアンドロイド:ボタンを押した後に遅延を入れる方法は?

+1

が、5秒の遅延は、ユーザにアプリの存在の印象を与えることができます応答しない –

+0

オーディオの長さが変わった場合、おそらくメディアプレーヤーのコールバックを考えてみることができます - http://stackoverflow.com/questions/6001497/calling-another-activity-when-mediaplayer-get-finished-playing - アクティビティを呼び出す代わりに、ボタンを再度有効にすることができます –

+0

'CountDownTimer'を使用する – Houcine

答えて

29

myButton.setEnabled(false); 

Timer buttonTimer = new Timer(); 
buttonTimer.schedule(new TimerTask() { 

    @Override 
    public void run() { 
     runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       myButton.setEnabled(true); 
      } 
     }); 
    } 
}, 5000); 

これは、クリックされたときにボタンを無効にし、5秒後に再度有効になります。

アクティビティではなく、ビューを拡張するクラスでclickイベントが処理される場合は、同じことを実行しますが、runOnUiThreadpostに置き換えます。

+0

は完全に動作します!どうもありがとうございました – fargoh

2

ここに行きます。

((Button) findViewById(R.id.click)) 
    .setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     ((Button) findViewById(R.id.click)).setEnabled(false); 

     new Handler().postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       ((Button) findViewById(R.id.click)) 
        .setEnabled(true); 

      } 
     }, 5000); 

    } 
}); 
18

ボタンを無効にして、ボタンにpostDelayedメソッドを使用できます。

myButton.setEnabled(false); 
myButton.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     myButton.setEnabled(true); 
    } 
}, 5000); 

このタイマ溶液と同様であるが、(ユーザが電話を回転させる場合など)は、より良好な構成変更を扱うかもしれない

関連する問題