2012-11-15 188 views
7

我有一個按鈕,當它按下時,它播放一個音頻文件。我想在按鈕上放置5秒的延遲,以便用戶不會搗碎按鈕並反覆播放聲音。我想我真的想讓按鈕在被按下5秒後被禁用。有誰知道如何做到這一點?ANDROID:按下按鈕後如何延遲?

+1

但5秒延遲可能給用戶的應用程序的存在的印象無響應 –

+0

如果音頻的長度發生變化,或許您可以考慮在媒體播放器上進行回調 - http://stackoverflow.com/questions/6001497/calling-another-activity-when-mediaplayer-get-finished-playing - 而不是調用活動,你可以重新啓用你的按鈕 –

+0

使用'CountDownTimer' – Houcine

回答

29

在你onClickListener的按鈕:

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秒後再次啓用它。

如果點擊事件在擴展視圖的類中處理,而不是在活動中執行,則執行相同的操作,但用post替換runOnUiThread

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

這類似於定時器解決方案,但它可能會更好地處理配置改變(例如,如果用戶旋轉手機)