0

我寫這裏是因爲我在Android Studio中有一個非常煩人的問題。 我的「應用程序」非常簡單,一頁有13個按鈕;我想要的只是簡單的:當我點擊第13個按鈕時,逐一更新前十二個按鈕。 我想看看按鈕更新每個之間有一點點間隔,但我不明白如何去做。 我在「onClick」方法中嘗試了很多技巧,但我無法弄清楚如何解決它;我得到的是,經過一段時間(所得到的時間加起來,我把這個功能加入了各種「睡眠」),所有的按鈕同時變成了彩色。 我把我的最後一次嘗試,但如果你有任何其他的方式做到這一點,我願意改變繼續前進的方式。Android Studio:單擊按鈕時逐個更新多個按鈕的背景

int[] buttonIDs = new int[] {R.id.button1, R.id.button2, R.id.button3, R.id.button4, R.id.button5, R.id.button6, R.id.button7, 
     R.id.button8, R.id.button9, R.id.button10, R.id.button11, R.id.button12 }; 
int currentI = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final Button goButton = (Button) findViewById(R.id.button13); 

    goButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if (currentI < buttonIDs.length) { 
       Button b = (Button) findViewById(buttonIDs[currentI]); 
       b.setBackgroundColor(Color.parseColor("#FF22FF")); 
       currentI++; 

       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       Thread t = new Thread() { 
        public void run() { 
         goButton.performClick(); 
        } 
       }; 

       t.start(); 
      } 
     } 
    }); 

} 

這種嘗試的結果是,第一個按鈕變成彩色,然後我得到「應用程序已停止」錯誤的Android模擬器。

在此先感謝

+0

你不應該睡在UI線程上。這隻會阻止用戶界面迴應。 –

+0

即使我將其刪除,應用程序也會崩潰。除此之外,我需要一種方法讓按鈕一個接一個着色,因此我放了一個睡眠(我甚至試圖在線程t的「運行」方法中放入「睡眠」,但它不會改變任何東西。 – Andrew1410

+0

UI線程負責對按鈕進行樹更改,通過睡眠UI線程可以阻止這些更改的生效,所以這絕對不是正確的解決方案,請參閱下面的兩個答案以獲得一些建議,它們都不是完整的,但希望他們會幫助你在正確的方向 –

回答

0

這裏的基本想法是,你需要創建一個新的線程,這標誌着UI線程更新每個按鈕。在每次更新之間,新線程需要等到UI有機會執行更新。我對這種事情不是很有經驗。你可能很可能用Handler來做這件事。可能會有更多的高級工具可以使用,但我不確定。

你絕對不想睡覺UI線程。這隻會導致界面無響應。

1

使用此

final Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
    //Do something after 1000ms 
    } 
}, 1000); 
+0

這似乎接近什麼OP是尋找 –

+0

謝謝你,男人,它的工作!你救了我:) – Andrew1410