2010-05-19 8 views
0

Ok .. Je suis en train de faire quelque chose de similaire à ce qui suit:La boîte de dialogue de progression dans Android ne s'affiche pas?

private void onCreate() { 
    final ProgressDialog dialog = ProgressDialog.show(this, "Please wait..", "Doing stuff..", true); 
Thread t = new Thread() { 
    public void run() { 
     //do some serious stuff... 
     dialog.dismiss();   
    } 
}; 
t.start(); 
t.join(); 
stepTwo(); 

} 

Cependant, ce que je trouve est que ma boîte de dialogue de progression jamais présente. Mon appli se bloque pendant un moment, donc je sais que ça coule à l'intérieur du fil t, mais pourquoi ma boîte de dialogue n'apparaît-elle pas?

Si je supprime la ligne:

t.join(); 

Alors ce que je trouve arrive est que la boîte de dialogue de progression ne se présente, mais mon application commence stepTwo(); avant que ce qui se passe dans le fil est terminée ..

Des idées?

Répondre

2

Essayez d'utiliser un gestionnaire

public class MyActivity { 

private Handler handler; 

private void onCreate() { 

    handler = new Handler() { 

     @Override 
     public void handleMessage(Message msg) { 
     pd.dismiss(); 
     stepTwo(); 
     } 
    }; 

    final ProgressDialog dialog = ProgressDialog.show(this, "Please wait..", "Doing stuff..", true); 
    Thread t = new MyThread() { 
    t.start(): 

} 

private class MyThread extends Thread() { 
    public void run() { 
     //do some serious stuff... 
     handler.sendEmptyMessage(0);  
    } 
} 

} 
+0

Merci pour la suggestion Sebi - Je n'ai jamais travaillé avec Handlers auparavant .. J'ai essayé l'implémentation comme vous l'avez, mais j'ai reçu quelques erreurs (en particulier autour de private class MyThread extends Thread()) Donc, je n'ai pas réussi à faire fonctionner ça. Est-ce qu'il n'y a pas de solution plus facile dans mon code initial pour assurer que PD apparaisse? – Tyler

+0

Thread t = new MyThread() { t.start(): }; c'est faux. la valeur correcte est Thread t = new MyThread(); t.start(); –

2

vos blocs de ligne de jonction() le thread d'interface utilisateur qui exécute le ProgressDialog. Vous bloquez donc les mises en page, les dessins, etc.

+0

Je vois. Donc, un gestionnaire est le seul moyen de contourner cela? – Tyler

Questions connexes