2012-06-25 58 views
1

我想在我的視圖加載之前顯示一個Progress-Dialog。 首先,我在onCreate()中編寫了代碼,但在這種情況下不會出現對話框。所以我在onResume()中寫了它,但在這種情況下,即使視圖已經加載,它也不會消失。任何人都可以告訴這裏出了什麼問題嗎?即使視圖已加載,我的ProgressDialog也不會關閉。

   protected void onResume() { 
    // TODO Auto-generated method stub 

    super.onResume(); 
    dialog = ProgressDialog.show(this, "", "Please wait...", true); 
    //dialog.cancel(); 
    new Thread() 
    { 
     public void run() 
     { 

     try 
      { 

      sleep(1500); 

     // do the background process or any work that takes time to see progress dialog 

      } 
     catch (Exception e) 
     { 
      Log.e("tag",e.getMessage()); 
     } 
    // dismiss the progressdialog 
    dialog.dismiss(); 
    } 
    }.start(); 
    citySelected.setText(fetchCity); 
    spinner.setSelection(getBG); 
} 
+1

write dialog.dismiss();行外線程代碼。 – Nirali

+0

我的[回覆](http://stackoverflow.com/a/9078502/996493)可能會給你一些邏輯部分 – Lucifer

回答

0

您可以使用AsyncTask。它比線程更好

private class DownloadingProgressTask extends 
     AsyncTask<String, Void, Boolean> { 

    private ProgressDialog dialog = new ProgressDialog(ShowDescription.this); 
    protected void onPreExecute() { 
     this.dialog.setMessage("Please wait"); 
     this.dialog.show(); 

    } 
    protected Boolean doInBackground(final String... args) { 
     try { 
       downloadFile(b.getString("URL")); 
       return true; 
     } catch (Exception e) { 
       Log.e("tag", "error", e); 
       return false; 
     } 
    } 
    @Override 
    protected void onPostExecute(final Boolean success) { 

     if (dialog.isShowing()) { 
     dialog.dismiss(); 
     } 
    } 
} 
1

你不能從其他線程更新UI(它在主UI線程中)。如果你想在後臺運行任何查詢,你可以使用AsyncTask。

在onPreExecute方法中,顯示對話框和onPostExecute可以關閉對話框。

如果你想使用線程,然後使用處理程序更新UI。

使用的AsyncTask

public class MyAsyncTask extends AsyncTask<String, Void, String> { 
    ProgressDialog dialog = new ProgressDialog(ActivityName.this); 
    @Override 
    protected void onPreExecute() { 
     dialog.show(); 
     super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     try { 
      Thread.sleep(3000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     dialog.dismiss(); 
     super.onPostExecute(result); 
    } 

} 

在活動onCreate方法,

MyAsyncTask task = new MyAsyncTask(); 
    task.execute(); 
+0

只是看到我更新的答案使用AsyncTask –

+0

我試着實現這一點,但它暫停屏幕到同一活動然後加載下一個視圖而不顯示對話框! – Chetna

+0

如果要在完成此操作後開始新活動,請在onPostExecute方法中啓動新活動。不要打電話給自己。我想,你在task.execute()之後調用onCreate中的startActivity。把它放在onPostExecute –

0

更好地使用Asynctask .........但如果你仍然想相同或想know the solution only則可以嘗試

new Thread() 
    { 
     public void run() 
     { 

     try 
      { 

      sleep(1500); 

     // do the background process or any work that takes time to see progress dialog 

      } 
     catch (Exception e) 
     { 
      Log.e("tag",e.getMessage()); 
     } 




    YourActivity.this.runOnUIThread(new Runnable(){ 
         @Override 
         public void run(){ 
          // dismiss the progressdialog 
           dialog.dismiss(); 
         }); 





    } 
    }.start(); 
+0

我試圖實現這一點,但它仍然無法正常工作!該對話框不會消失。 – Chetna

相關問題