2012-11-15 19 views
7

Mam przycisk i po jego naciśnięciu odtwarza plik audio. Chcę umieścić 5-sekundowe opóźnienie na przycisku, aby użytkownicy nie musieli zacieruwać przycisku i odtwarzać dźwięk w kółko. Domyślam się, że tak naprawdę chcę, aby przycisk był wyłączony przez 5 sekund po jego naciśnięciu. Czy ktoś wie, jak to zrobić?ANDROID: Jak ustawić opóźnienie po naciśnięciu przycisku?

+1

ale 5 sekund opóźnienia może dać użytkownikowi wrażenie app samopoczucia brak odpowiedzi –

+0

Jeśli zmieni się długość dźwięku, być może warto rozważyć oddzwanianie w odtwarzaczu multimedialnym - http://stackoverflow.com/questions/6001497/calling-another-activity-when-mediaplayer-get-finished-playing - zamiast wywoływać aktywność, możesz po prostu ponownie włączyć swój przycisk –

+0

użyj 'CountDownTimer' – Houcine

Odpowiedz

29

W swojej onClickListener dla przycisku:

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

ten będzie wyłączyć przycisk po kliknięciu, i włączyć go ponownie po upływie 5 sekund.

Jeśli zdarzenie kliknięcia jest obsługiwane w klasie, która rozszerza widok, a nie w działaniu, wykonaj to samo, ale zamień runOnUiThread na post.

+0

działa idealnie! Dziękuję Ci bardzo – fargoh

2

Proszę bardzo.

((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

Można wyłączyć przycisk, a następnie użyć metody postDelayed na przycisku.

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

ten jest podobny do rozwiązania timera, ale może lepiej obsługiwać zmianę konfiguracji (na przykład, jeśli użytkownik obrócić telefon)

Powiązane problemy