2012-11-15 2 views
7

Ich habe einen Knopf und wenn er gedrückt wird, spielt er eine Audiodatei ab. Ich möchte eine 5-sekündige Verzögerung auf den Button legen, damit die User den Button nicht mehr knacken und den Sound immer und immer wieder spielen. Ich schätze, was ich wirklich will, dass die Taste nach dem Drücken für 5 Sekunden deaktiviert wird. Weiß jemand, wie man das macht?ANDROID: Wie man eine Verzögerung setzt, nachdem eine Taste gedrückt wird?

+1

aber eine Verzögerung von 5 Sekunden dem Benutzer den Eindruck der app Wesen kann geben non-responsive –

+0

Falls sich die Länge des Audiomaterials ändert, könnten Sie vielleicht einen Rückruf auf dem Media Player in Erwägung ziehen - http://stackoverflow.com/questions/6001497/calling-another-activity-when-mediaplayer-get-finished-playing - Anstatt die Aktivität aufzurufen, können Sie einfach Ihre Taste wieder aktivieren –

+0

Verwenden Sie "CountDownTimer" – Houcine

Antwort

29

In Ihrem OnClickListener für die Schaltfläche:

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

Dies wird die Schaltfläche deaktivieren, wenn geklickt hat, und ermöglicht es wieder nach 5 Sekunden.

Wenn das Klickereignis in einer Klasse behandelt wird, die View statt in einer Aktivität erweitert, machen Sie dasselbe, aber ersetzen Sie runOnUiThread durch post.

+0

funktioniert perfekt! vielen Dank – fargoh

2

Hier gehen Sie.

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

können Sie Ihre Taste deaktivieren, verwenden Sie dann die postDelayed Methode auf den Button aus.

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

Diese zur Timer-Lösung ähnlich ist, aber es könnte besser Konfigurationsänderung (zum Beispiel, wenn der Benutzer das Telefon drehen) hand

Verwandte Themen