2011-12-02 12 views
0

Bonjour les gars pourquoi quand j'ajouter ProgressDialog il devenir ne répond pasProgressDialog ne répond pas

  ProgressDialog dialog = ProgressDialog.show(AppsInspectorActivity.this, "", 
        "Scanning package " + pkgInfo.packageName, true); 
      dialog.setCancelable(true); 
      dialog.show(); 

au-dessus Log.v(TAG, "Scanning package " + pkgInfo.packageName);

private List<PackageInfo> getAdPackages() { 

[HEAVY STUFF]

return new ArrayList<PackageInfo>(adPackages); 
} 

}

+0

Désolé, je ne suis pas sûr que je comprends ce que vous entendez par « il ne répond pas devenir » – Kaediil

Répondre

1

ASyncTask est la solution idéale. juste redéfinir doInBackground(). et utilisez une classe Handler pour arrêter (reject()) le progressDialog.

http://www.helloandroid.com/tutorials/using-threads-and-progressdialog semble utile ..

http://www.vogella.de/articles/AndroidPerformance/article.html très en profondeur la version ..

+0

comment étendre? c'est 'extends AsyncTask , Void, ArrayList > {'? – xAnGz

+0

sa liste d'arguments est flux, im utilisant actuellement "extends AsyncTask " et "protected String doInBackground (String ... urls)". Si vous avez besoin d'une structure plus complexe, je la lierais à la portée (membre privé/champ). –

0

Pouvez-vous de bien ce que ne répond pas signifie? La boîte de dialogue ne s'affiche-t-elle jamais ou ne s'ouvre-t-elle pas lorsque vous appuyez sur Retour? Une fois l'opération terminée, essayez de rejeter le dialogue avec:

dialog.dismiss() 
0

Je vais faire une supposition au problème, si vous disiez que les gels de dialogue de progression et l'application devient non réactif, il semble que vous n'avez pas enfilé le processus à long terme que le dialogue est conçu pour représenter. Par défaut, tout le code est exécuté sur le thread d'interface utilisateur, donc si votre processus prend trop de temps, l'écran ne se met pas à jour et l'utilisateur reçoit la notification de la mort (ne répond pas). Vous devez filer des processus à long terme (de préférence dans une tâche asynchrone) et publier des mises à jour dans la boîte de dialogue de progression si nécessaire dans la méthode onProgressUpdate.

+0

Donc, si j'utilise asyn tâche quelle section dois-je prolonger? 'liste privée'? – xAnGz

+0

Vous devez créer une nouvelle classe qui étend la tâche asynchrone, démarrer la boîte de dialogue dans la pré-exécution et effacer la boîte de dialogue dans la publication post, et publier les mises à jour nécessaires dans la section de mise à jour de la progression. – Pyrodante

+0

Aussi: si ce n'est pas évident migrer votre processus à long terme dans le "doInBackground" – Pyrodante