2011-08-01 3 views
0

J'ai une méthode de fonctionnement longue qui est appelée pendant onCreate, cette méthode remplit textviews ainsi interagit avec l'interface utilisateur, et met à jour peut-être 70 étiquettes (environ 3-20 secondes selon l'appareil).Montrer un progressdialog dans android pendant qu'une grande méthode est exécutée

Je souhaite afficher un dialogue de progression lorsque cette méthode est exécutée.

Idéalement, je veux déclencher ma méthode sur le thread UI une fois que l'activité a été affichée et la progression est affichée, ce que je ne peux pas faire, l'activité ne peindra pas jusqu'à ce que la méthode est terminée.

J'espérais trouver un événement qui a été déclenché après l'affichage de l'activité, et j'ai trouvé celui ci-dessous, mais il laisse toujours l'écran noir jusqu'à ce que la méthode soit terminée.

@Override onPostCreate public void (Bundle savedInstanceState)

Je suis normalement un développeur de WP7, et dans .NET vous ajoutez un gestionnaire d'événements pour onLoadComplete qui est déclenché après ui est affiché, mais avant que l'utilisateur a une chance d'interagir avec l'interface utilisateur, comment puis-je faire cela dans Android JAVA?

Merci

+0

avez-vous vu threathing indolore? – PedroAGSantos

Répondre

0

Mettre un ProgressBar dans la vue.

Ensuite, dans la méthode onCreate() ou onResume() le font:

new Thread() { 
    public void run() { 
     yourLargeMethod(); 
    } 
}.start(); 

Maintenant, vous pouvez le faire dans votre méthode pour mettre à jour la barre de progression

public void yourLargeMethod() { 
// doSomething 
... 

runOnUiThread(new Runnable() { 
     public void run() { 
      // update the progress from the thread 
      progressBar.setProgress(x); // x is your progress, 0 <= x <= progressBar.getMax() 
     } 
    }); 
} 
+0

Il est probablement préférable d'utiliser un AsyncTask. – Kaj

+0

Avec AsyncTask cependant, je devrais mettre à jour l'UI 70 fois impaires, ainsi que le câblage des gestionnaires d'événements aux boutons et autres. ma longue méthode n'est pas un calcul, elle est en train de mettre en place un grand compte rendu, donc le faire tourner sur le thread de l'interface est très avantageux pour moi, j'ai juste besoin de bloquer l'interface utilisateur avec une barre de progression. N'y a-t-il aucun événement appelé post-rendu de l'activité? – Ben

+0

Pourquoi ne pas afficher un ProgressBar et dans un thread distinct créer l'interface utilisateur dans un ViewGroup de votre choix qui n'est pas affiché. A la fin, ajoutez le ViewGroup résultant à la disposition principale et supprimez/cachez le ProgressBar. Si vous devez dans le thread UI la barre de progression ne bougera pas et le périphérique ne répondra pas aux commandes. – Auras

Questions connexes