2011-05-17 129 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事件线程上运行。