2016-08-16 41 views
0

在我的Android應用程序中,我試圖顯示一系列按鈕(一個接一個地)記住並由用戶重複。爲此,我使用帶有postDelay方法的runnables來更改UI。目前所有按鈕順序顯示在同一時刻,全部都在同一時刻隱藏。有人可以幫助我同步runnables以顯示一個又一個不在一起嗎?代碼如下。如何同步runnables以開始一個又一個?

for(int i = 0; i < generatedSequenceToPlay.size(); i++){ 
     final int position = i; 
     _handler.postDelayed(new Runnable() { 
      @Override 
      public synchronized void run() { 
       findButtonById(_defuseButtonHandler.getKeyByValue(generatedSequenceToPlay.get(position).toString())).setPressed(true); 
      } 
     }, 500); 
     _handler.postDelayed(new Runnable() { 
      @Override 
      public synchronized void run() { 
       findButtonById(_defuseButtonHandler.getKeyByValue(generatedSequenceToPlay.get(position).toString())).setPressed(false); 

      } 
     }, 500); 
    } 
+1

增加'爲每次循環迭代postDelayed'最後一個參數,例如:'500 *第(i + 1)' – pskink

+0

對一些常見的對象同步 – sidgate

回答

0

檢查的postDelayedthis page.

的方法解釋導致要被添加到消息隊列中的可運行R,經過指定的時間量後運行 。在該處理程序所連接的線程上運行可運行子程序 。

當指定時間過去後,可從消息隊列中獲取可運行任務並將其附加到線程以供運行。所有可運行的任務將在500毫秒後同時運行差不多,因爲每個任務都不耗費時間。正如@pskink建議的那樣,給每個可運行任務一個不同的計時器會對你有好處。

例如,您可以修改下面的代碼。

for(int i = 0; i < generatedSequenceToPlay.size(); i++){ 
     final int position = i; 
     _handler.postDelayed(new Runnable() { 
      @Override 
      public synchronized void run() { 
       findButtonById(_defuseButtonHandler.getKeyByValue(generatedSequenceToPlay.get(position).toString())).setPressed(true); 
      } 
     }, 500 + i * 100); 
     _handler.postDelayed(new Runnable() { 
      @Override 
      public synchronized void run() { 
       findButtonById(_defuseButtonHandler.getKeyByValue(generatedSequenceToPlay.get(position).toString())).setPressed(false); 

      } 
     }, 500 + i * 100); 
    } 
相關問題