2010-08-30 13 views
3

J'ai des données que je charge dans la base de données la première fois qu'un utilisateur entre Activity et souhaite afficher un ProgressDialog lorsque ces données sont chargées pour la première fois. Mon activité est un ExpandableListActivity et je ne crée pas le SimpleExpandableListAdapter ou l'appel setListAdapter en passant mon adaptateur jusqu'à ce que je suis sûr que les données sont réellement là. Mon onCreate ressemble à ceci:Android: la boîte de dialogue de progression ne s'affiche pas

@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(); 
    } 

J'ai onCreateDialog en tant que tels écrasés:

@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; 
    } 

La méthode populate() lit la base de données et met en place mon adaptateur de liste, puis appelle setListAdapter.

Cela semble devoir être simple, mais c'est une énorme douleur. Toute aide serait appréciée. :-)

Répondre

2

Utilisez AsynTask mettre votre base de données de traitement de chargement en fonction d'arrière-plan et dans le résultat d'affichage de poste d'exécution. et il y a une autre fonction de traitement jusqu'à ce que quelque chose en arrière-plan en cours d'exécution ici est par exemple de asynTask

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

+0

Ouais, c'est une façon de le faire, mais AsyncTask a eu un problème avec moi en essayant de faire dormir le thread pendant quelques secondes afin que la boîte de dialogue de progression reste allumée un peu et ne se contente pas de clignoter. J'ai fini par faire mon traitement dans un nouveau thread, et j'ai tué le dialogue de progression dans un gestionnaire. –

2

Il suffit d'utiliser cette ligne simple:

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

Vous pouvez rejeter avec:

mProgressDialog.dismiss(); 
+0

Je l'ai essayé, ça ne marche pas. Rien ne montre. –

+0

Il devrait. Vérifiez si vos importations sont correctes. Cela devrait fonctionner. – Macarse

+0

Non. Pas de dé. Tout va bien. Je l'ai eu pour travailler en générant un autre thread et en faisant builder.fillDbWithDefaultCategories() dans la méthode run(). –