2012-04-06 38 views
0

有幾天有一些問題。 我需要顯示簡單的ProgressBar(不是對話),而在主線程中做一些東西... 我認爲它是一個非常簡單的問題,但我不能這樣做,請幫助我。在另一個線程中顯示ProgressBar

首先我試過簡單的setVisibility(View.VISIBLE)之前和setVisibility(View.GONE)之後。

但是,這是在同一個線程,並ProgressBar凍結,而我的功能工作。

現在我有這樣的代碼,但我有一些錯誤,我不知道什麼是錯..

我簡單的佈局:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
<ProgressBar 
    android:id="@+id/loading" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:visibility="gone" /> 
</FrameLayout> 

我有一個基本活動:

public class BaseActivity extends Activity { 
    public ProgressBar loading; 

    public class ProgressBarShow extends AsyncTask<Void, Void, Void> { 
    protected Void doInBackground(Void... unused) { 
     return(null); 
    } 

    protected void onProgressUpdate() { 
    } 
    protected void onPreExecute() { 
     loading.setVisibility(View.VISIBLE); 
    } 

    protected void onPostExecute() { 
    } 
    } 
} 

最後是我的工作活動,它延伸了BaseActivity

public class SearchActivity extends BaseActivity { 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     loading = (ProgressBar) findViewById(R.id.loading); 

     new ProgressBarShow().execute(); 
     //doing long stuff 
     //new ProgressBarHide().execute(); there isnt, but sense the same 
    } 
} 

我有很多活動,這需要進度條,這就是爲什麼我創建了BaseActivity, 不公開代碼。

我需要在主線程中做長時間的工作(stuff函數),因爲我想凍結主窗口並且不允許用戶做任何事情(點擊按鈕等),只是顯示工作進度條。

我的例子有什麼問題?或者給我一些意見,我怎麼能做到這一點更好

+0

做的,如果你想阻止與應用程序,爲什麼用戶交互你不只是使用進度對話框?我建議你使用進度對話框,因爲正在做你想要的。 – Cata 2012-04-06 08:48:06

回答

2
class ProgressTask extends AsyncTask<Integer, Integer, Void>{ 
    ProgressBar progress; 
    Context context; 
    public ProgressTask(ProgressBar progress, Context context) { 
     this.progress = progress; 
     this.context = context; 

    } 
    @Override 
    protected void onPreExecute() { 
     // initialize the progress bar 
     // set maximum progress to 100. 
     progress.setMax(100); 

    } 


    @Override 
    protected Void doInBackground(Integer... params) { 
     // get the initial starting value 
     int start=params[0]; 


     // increment the progress 
     for(int i=start;i<=100;i+=5){ 
      try { 
       boolean cancelled=isCancelled(); 
       //if async task is not cancelled, update the progress 
       if(!cancelled){ 
        publishProgress(i); 
        SystemClock.sleep(1000); 

       } 

      } catch (Exception e) { 
       Log.e("Error", e.toString()); 
      } 

     } 
     return null; 
    } 
    //Has direct connection to UI Main thread 
    //Called everytime publishProgress(int) is called in doInBackground 
    @Override 
    protected void onProgressUpdate(Integer... values) { 
     progress.setProgress(values[0]); 
     Toast.makeText(context, "test"+values[0], Toast.LENGTH_SHORT).show(); 
    } 


    @Override 
    protected void onPostExecute(Void result) { 
     // async task finished 
        Log.v("Progress", "Finished"); 
    } 
    @Override 
    protected void onCancelled() { 
     progress.setMax(0); 
    } 
} 
+0

但它的ProgressDialog,我如何設置簡單進度條的可見性? – yital9 2012-04-06 09:59:59