2015-12-24 68 views
0

我正在使用水平進度條。它工作正常,但不會在完成時間後消失。完成後進度條不會執行

progressBar = (ProgressBar) findViewById(R.id.progressBar1); 
progressBar.setRotation(180); 
new Thread(new Runnable() { 
    public void run() { 
     while (progressStatus < 21) { 
      progressStatus += 1; 
      handler.post(new Runnable() { 
       public void run() { 
        progressBar.setProgress(progressStatus); 
        } 
      }); 
      try { 
       Thread.sleep(110); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
     progressBar.setVisibility(View.GONE); 
     img.setVisibility(View.GONE); 
    } 
}).start(); 

}

在while語句崩潰我的應用程序年底setVisibility()函數。

的logcat:

12-24 09:55:54.502 7160-7245/com.food.foodjugaad E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-25568 
Process: com.food.foodjugaad, PID: 7160 
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
     at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6462) 
     at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:897) 
     at android.view.View.requestLayout(View.java:17494) 
     at android.view.View.requestLayout(View.java:17494) 
     at android.view.View.requestLayout(View.java:17494) 
     at android.view.View.requestLayout(View.java:17494) 
     at android.view.View.requestLayout(View.java:17494) 
     at android.view.View.requestLayout(View.java:17494) 
     at android.view.View.requestLayout(View.java:17494) 
     at android.view.View.setFlags(View.java:9726) 
     at android.view.View.setVisibility(View.java:6698) 
     at android.widget.ProgressBar.setVisibility(ProgressBar.java:1546) 
     at com.food.foodjugaad.Swipe$2.run(Swipe.java:95) 
     at java.lang.Thread.run(Thread.java:818) 

回答

1

Android的只有1個線程更新UI,這是UI線程,其他任何線程不能更新UI,如果這樣做會拋出異常。我編輯了你的代碼。你可以試試看。

progressBar = (ProgressBar) findViewById(R.id.progressBar1); 
progressBar.setRotation(180); 
new Thread(new Runnable() { 
    public void run() { 
     while (progressStatus < 21) { 
      progressStatus += 1; 
      handler.post(new Runnable() { 
       public void run() { 
        progressBar.setProgress(progressStatus); 
        } 
      }); 
      try { 
       Thread.sleep(110); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 

     runOnUiThread(new Runnable() { 
      public void run(){      
       progressBar.setVisibility(View.GONE); 
       img.setVisibility(View.GONE); 
      } 
     }); 
    } 
}).start(); 
+0

我已經發布了LogCat。 – TeeKay

+0

android只有1個線程來更新UI。但是你在另一個線程中調用update,所以會拋出錯誤。您需要在UI線程中調用setVisible。我用你的代碼編輯了我的文章。你可以試試看。 –

+0

工作。非常感謝!! – TeeKay

0

您只能從主線程修改窗​​口小部件。做另一個可以改變能見度。

+0

好吧,我試試看。 – TeeKay