2013-08-17 2 views
12

Ich würde gerne wissen, ob es möglich ist, handler() zu verwenden. Postdelayed zweimal?Android: use handler post.delayed zweimal

Ich meine, ich möchte eine Schaltfläche erstellen, die beim Klicken die Farbe ändern und in diesem Zustand bleiben 1 Sekunde, dann nach 1 Sekunde ändern Sie eine andere Schaltfläche die Farbe.

Ich habe den folgenden Code erstellt:

Im OnClickListener:

btn3.setBackgroundColor(Color.WHITE); 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 

     checkAnswer(); 
     waitAnswer(); 
     btnRsp3.setBackgroundResource(R.drawable.selector); 
     } 
    }, 1000); 

CheckAnswer:

public void CheckAnswer(){ 
     btn1.setBackgroundColor(Color.GREEN); 

    new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
    } 
}, 500); 

btn1.setBackgroundResource(R.drawable.selector); 
} 

denke ich, das Problem auf CheckAnswer ist, weil es so scheint es nicht Stoppen Sie in diesem postDelayed und treten Sie zum waitAnswer.

Danke

Antwort

20

Warum erwarten Sie, dass es auf postDelayed stoppt? postDelayed platziert Ihr Runnable in die Handler Looper-Warteschlange und kehrt zurück. Da beide Handler auf dem gleichen Looper erstellt werden, wird die zweite runnable nach dem ersten beendet ausgeführt (plus was auch immer links von der 500 ms Verzögerung)

UPDATE:

Sie benötigen etwas wie die

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     btn1.setBackgroundColor(Color.GREEN); 
    } 
}, 1000); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     btn1.setBackgroundResource(R.drawable.selector); 
    } 
}, 2000); 
+0

Vielen Dank für Ihre Antwort, aber ich verstehe nicht: Wenn die zweite Runnable ausgeführt wird, nachdem die erste beendet wird, warum ändert es nicht die Btn zu grünen Farbe wie ich Code in checkAnswer-Klasse? Es überspringt diesen Schritt nicht? – loading27

+0

Ihre zweite Runnable ist leer. checkAnswer ändert die Farbe in grün, stellt dann ein leeres Rechteck in die Warteschlange und setzt die Hintergrundressource, so dass sie nicht grün erscheint – msh

+0

Ja, aber ich dachte, wenn ich die Farbe auf grün setze und eine leere Warteschlange von 500 ms anlege, Ich sehe grün 500 ms. – loading27