2013-08-17 15 views
12

Mi piacerebbe sapere se è possibile utilizzare handler(). Postdelayed due volte?Android: utilizzare il gestore post.delayed due volte

Voglio dire, voglio creare un pulsante, che quando cliccato cambia colore e resta in questo stato 1 secondo, quindi, dopo 1 secondo un altro pulsante cambia colore.

ho creato il seguente codice:

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

Credo che il problema è in CheckAnswer perché sembra non è così fermati in questo postDelayed e passa al waitAnswer.

Grazie

risposta

20

perché si aspetta che si fermi su postDelayed? postDelayed colloca la tua Runnable alla coda di Looper dell'handler e restituisce. Dal momento che entrambi i gestori vengono creati sullo stesso crochet, la seconda eseguibile viene eseguito dopo il primo termina (più qualunque lasciato del ritardo 500 ms)

UPDATE:

Hai bisogno di qualcosa di simile

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

Grazie per la risposta, ma non capisco: se il secondo eseguibile viene eseguito dopo che il primo termina perché non cambia il btn in verde come il codice nella classe checkAnswer? Salta questo passo no? – loading27

+0

il tuo secondo Runnable è vuoto. checkAnswer cambia colore in verde, quindi accoda il rettangolo vuoto, quindi imposta la risorsa di sfondo, quindi non lo vedrai in verde – msh

+0

Sì, ma ho pensato se impostare il colore su verde e creare una coda vuota di 500 ms, quindi impostare di nuovo lo sfondo, vedo verde 500 ms. – loading27

Problemi correlati