2010-08-30 215 views
3

我有一些數據在用戶第一次輸入Activity時加載到數據庫中,並且希望在第一次加載此數據時顯示ProgressDialog。我的活動是ExpandableListActivity,我不創建SimpleExpandableListAdapter或致電setListAdapter通過我的適配器,直到我確定數據實際存在。我onCreate看起來是這樣的:Android:進度對話框不顯示

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mCategoryDbHelper = new CategoryDBHelper(this); 

     // Build default categories... if not there yet 
     CategoryDbBuilder builder = new CategoryDbBuilder(this); 
     if (!builder.hasCategoriesInTable()) { 
      showDialog(PROGRESS_DIALOG_ID); 
      builder.fillDbWithDefaultCategories(); 
      removeDialog(PROGRESS_DIALOG_ID); 
     } 

     populate(); 
    } 

我已經覆蓋onCreateDialog這樣:

@Override 
    protected Dialog onCreateDialog(int id) { 
     switch (id) { 
      case PROGRESS_DIALOG_ID: { 
       ProgressDialog dialog = new ProgressDialog(this); 
       dialog.setMessage("Loading categories for the first time. Please wait..."); 
       dialog.setIndeterminate(true); 
       dialog.setCancelable(false); 
       return dialog; 
      }  
     } 
     return null; 
    } 

populate()方法讀取數據庫並建立我的名單適配器,然後調用setListAdapter

這看起來應該很簡單,但它是一個巨大的痛苦。任何幫助,將不勝感激。 :-)

回答

2

使用AsynTask將數據庫加載處理後臺功能和執行後的結果顯示:

mProgressDialog = ProgressDialog.show(context, "", "msg to show", true); 

你可以關閉它。還有另外一個功能來處理事情,直到後臺進程運行這裏是asynTask

的例子

Android - I want to show file upload progress to the user

+0

是的,這是這樣做的一種方式,但是AsyncTask在嘗試讓線程休眠幾秒鐘時遇到了問題,所以進度對話框會保持一點而不是閃爍。我最終在一個新線程中完成了處理,並在Handler中終止了進度對話框。 – 2010-08-31 07:33:10

2

只要使用這個簡單的一行:

mProgressDialog.dismiss(); 
+0

我已經試過了,這是行不通的。沒有顯示。 – 2010-08-30 02:08:15

+0

它應該。檢查您的進口是否正常。這應該工作。 – Macarse 2010-08-30 02:37:09

+0

沒有。沒有骰子。一切安好。我通過產生另一個線程並在run()方法中執行builder.fillDbWithDefaultCategories()來實現它。 – 2010-08-30 02:53:58