2011-11-01 66 views
0

我使用下面的代碼來顯示動態進度對話框:Android的進度對話欄懷疑

public void loading() 
{ 
    final int WelcomeScreenDisplay=1000; 
    progressDialog = new ProgressDialog(this); 
    progressDialog.setCancelable(true); 

    progressDialog.setMessage("Loading..."); 
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    progressDialog.incrementProgressBy(10); 
    progressDialog.show(); 



    Thread WelcomeThread=new Thread() 
    { 
     int wait=0; 
     public void run() 
     { 
      try 
      { 
       super.run(); 
       while(wait<WelcomeScreenDisplay) 
       { 
        sleep(100); 
          // progressDialog.setProgress(0); 
        progressDialog.incrementProgressBy(10);  
         wait+=100; 

       } 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 

     } 
    }; 
    WelcomeThread.start(); 
} 

但有一些問題: 1)調用按鈕,點擊此功能時,則顯示加載條2)當用戶輸入用戶名和密碼並點擊登錄按鈕時,顯示進度條,當活動從登錄頁面跳轉到另一頁面時使用意圖,然後在加載第二頁的動態內容時,空白屏幕顯示在兩個頁面之間1-2分鐘

我想要要知道我將實現哪些更改,以便這個空白屏幕不應該出現......並且當加載完成時,我的應用程序將從1頁跳轉到另一頁。

+0

管理你的線程,它的發生是因爲非管理線程..你應該看線程什麼時候開始.. !! –

+1

AsyncTask(http://developer.android.com/reference/android/os/AsyncTask.html)?這對你的情況會更好。 – muratonnet

+0

但我正在使用單個線程。 – Kanika

回答

2

每當您執行此類操作時都使用AsyncTask。下面是一個簡單

class eval extends AsyncTask<Void,Void,Void> 
{ 

    ProgressDialog d; 

    @Override 
    protected void onPreExecute() 
    { 
     super.onPreExecute(); 
     d=ProgressDialog.show(MainScreen.this,"Please Wait","Populating content...",true); 
    } 

    @Override 
    protected void doInBackground(Void... params) 
    { 
     //perform the required operation of fetching contents 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) 
    { 
     super.onPostExecute(result); 
     d.dismiss(); 
     // now call the required Activity 

    } 
} 

現在在程序中調用這個任務,你需要做到這一點

new eval().execute(); 

確保你沒有這個說法後,主UI線程的任何操作

+0

我沒有得到你的答案的最後一行,因爲「確保你沒有任何操作在主語UI線程後」這個語句「 – Kanika

+0

假設你在新的eval()執行後顯示一條消息,說明」data fetch complete「 ()語句,而不是在onPostExecute()方法中,那麼即使在成功完成數據提取之前,也會打印此消息......所有這些都是因爲您正在使用線程。所以要確保所有必須嚴格執行的操作都是在onPostExecute()方法中提供的。 – Saiesh

+0

好的。我得到了這一點..Thankyou – Kanika

0

據我所知,AsyncTask將是執行此類任務的最佳方式,因爲在這種情況下,UI將可以自由執行其他任務,否則UI將在任務期間掛起,並且也不用擔心線程管理。 你可以嘗試:

http://android-solution-sample.blogspot.com/2011/11/android-asynctask-example.html

http://developer.android.com/reference/android/os/AsyncTask.html

+0

Thankyou hemant .. – Kanika

+0

你的博客對我很有幫助 – Kanika

+0

我的榮幸能夠幫助你。 –

0

你必須在doInBackground()方法來獲取數據。當發生這種情況時...會顯示進度對話框。您可以在onPostExecute()中調用另一個活動。是,執行順序是onPreExecute(),然後是doInBackground(),最後是OnPostExecute()。請記住doInBackground()方法在非UI線程中執行。所以你不能在這裏使用toast或alertDialogues。