2013-08-17 42 views
12

我想知道是否可以使用handler()。postdelayed兩次?Android:使用處理程序post.delayed兩次

我的意思是,我想創建一個按鈕,當點擊它時,它會改變顏色並保持這種狀態1秒,然後,在1秒鐘後,另一個按鈕會改變顏色。

我創建了下面的代碼:

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

我認爲這個問題是CheckAnswer,因爲它似乎它不停在這個postDelayed並進入waitAnswer。

謝謝

回答

20

爲什麼你期望它停在postDelayed? postDelayed將您的Runnable放置到處理程序Looper隊列並返回。由於這兩種處理器都在同一尺蠖創建的,第二個運行的是第一個終止後執行(加上留下的500毫秒的延遲等等)

UPDATE:

你需要類似的東西

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

謝謝你的回答,但我不明白:如果第二個runnable在第一個終止之後執行,爲什麼它不會像更改checkAnswer類中的代碼那樣將btn更改爲綠色?它跳過這一步否? – loading27

+0

你的第二個Runnable是空的。 checkAnswer將顏色更改爲綠色,然後將空白矩形排隊,然後設置背景資源,因此您不會看到它爲綠色 – msh

+0

是的,但我認爲如果將顏色設置爲綠色並創建一個500毫秒的空隊列,然後再次設置背景,我看到綠色500毫秒。 – loading27