2010-07-14 80 views
14

我嘗試了線程,但android會拋出「CalledFromWrongThreadException:只有創建視圖層次結構的原始線程可以觸及其視圖。」如何顯示視圖3秒鐘,然後隱藏它?

那麼,我該如何等待3秒鐘,然後隱藏視圖,讓GUI響應?

-

A定時器使用另一個線程要麼,所以它不會解決..

+0

於Android的啓動畫面簡單的例子,Userful公司給你:[點擊這裏](http://www.androidpeople.com/android-loading-welcome-splash-spash-screen-example「spash screen example」) – Popeye 2012-11-20 09:19:45

回答

15

菌種一個單獨的線程休眠3秒鐘然後調用runOnUiThread隱藏視圖。

Thread thread = new Thread() { 
     @Override 
     public void run() { 
      try { 
       Thread.sleep(3000); 
      } catch (InterruptedException e) { 
      } 

      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        // Do some stuff 
       } 
      }); 
     } 
    }; 
    thread.start(); //start the thread 
+2

一個'Message'和一個'Handler'可以做更多的Android-y方法來做同樣的事情,特別是當涉及到UI操縱。 – Dave 2010-07-14 17:39:13

+0

當線程正在休眠時,它仍然使得GUI對我的按鍵不負責任。 – 2010-07-14 18:06:33

+0

@Dave我想了解更多關於.. – 2010-07-14 18:07:34

42

還有一個更簡單的方法來做到這一點:使用View.postDelayed(runnable, delay)

View view = yourView; 
view.postDelayed(new Runnable() { 
     public void run() { 
      view.setVisibility(View.GONE); 
     } 
    }, 3000); 

這不是很精確:可以隱藏在3.5或3.2秒,因爲它張貼到UI線程的消息隊列。

使用post()或runOnUiThread()就像setTimeout()一樣。

+0

好看又簡單!謝謝.. – 2012-01-17 11:50:34

+4

我想它應該postDelayed而不是後 – marcinj 2013-01-30 14:26:01

+1

+1因爲它比使用'wait'或'sleep'少麻煩。但是你有一個錯字(它的'Runnable(){...}',並且有'''丟失)請修復它,這樣你可以得到更多的提示。還提到'runOnUithread'。接下來會發生什麼,因爲我對於細節有些迷戀,但是也許在某些句子中正確使用了英語? (別殺我!))。我只是說因爲我認爲這應該是被接受的答案。 – acrespo 2013-10-09 17:05:00

12

沒有必要非得視圖引用或睡一個線程:

new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      // do stuff 
     } 
    }, 3000); 
相關問題