2011-05-17 237 views
1

我有這樣一個例子:螺紋Android中

package android.uiexample; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.View; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.ProgressBar; 
import android.widget.RadioGroup; 
import android.widget.Toast; 
import android.widget.ToggleButton; 
import android.widget.RadioGroup.OnCheckedChangeListener; 

public class BasicViewsExampleActivity extends Activity 
{ 

private static int progress = 0; 
private ProgressBar progressBar; 
private int progressStatus = 0; 
private Handler handler = new Handler(); 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.basic_views); 

    progressBar = (ProgressBar) findViewById(R.id.progressbar); 

    //---do some work in background thread--- 
    new Thread(new Runnable() 
    { 
     public void run() 
     { 
      //---do some work here--- 
      while (progressStatus < 10) 
      { 
       progressStatus = doSomeWork(); 
      } 



      //---hides the progress bar--- 
      handler.post(new Runnable() 
      { 
       public void run() 
       { 
        progressBar.setVisibility(View.GONE); 
       } 
      }); 

     }  

     //---do some long lasting work here--- 
     private int doSomeWork() 
     { 
      try { 
       //---simulate doing some work--- 
       Thread.sleep(500); 
      } catch (InterruptedException e) 
      { 
       e.printStackTrace(); 
      } 
      return ++progress; 
     } 

    }).start(); 
} 

}

在本例中,它使用處理程序來發布可運行到EXC progressBar.setVisibility(View.GONE);.我不知道爲什麼我不能調用progressBar.setVisibility(View.GONE);直接:

  //---do some work here--- 
      while (progressStatus < 10) 
      { 
       progressStatus = doSomeWork(); 
      } 



      //---hides the progress bar--- 
      progressBar.setVisibility(View.GONE); 

任何人都可以告訴我爲什麼我不能?

回答

1

android UI框架(就像之前的幾乎每個UI框架一樣)只允許您從主線程更新UI狀態。您可能需要查看AsyncTask,其中包括將進度更新路由到主線程所需的管道。

+0

感謝您的幫助:) – 2011-05-17 14:42:22

0

更改progressBar可見性是一個UI操作。所有UI操作必須在UI線程上完成。

1

看看Handler類。它提供了一種簡單的方法來排隊Runnable回調以在UI事件線程上運行。