Cher Android hackers, J'essaie de faire ce qui suit dans mon Android App: Lorsque l'utilisateur clique sur un élément de la liste dans un ListActivity, un ProgressDialog devrait apparaître, un préchargement devrait se produire et après il est fait, une autre activité devrait être appelée en utilisant une intention.Android: Problèmes avec ProgressDialog
J'ai essayé différentes approches. Ce qui ne fonctionnait pas du tout était l'utilisation d'une tâche asynchrone. Apparemment, je ne peux pas montrer, rejeter ou modifier mon ProgressDialog hors de la tâche asynchrone, si cette classe n'est pas un membre de mon activité originale.
je suis passé à un simple fil alors, est ce que je suis en train de le faire:
dialog = ProgressDialog.show(BookmarkActivity.this, "", "Loading...",true);
new Thread() {
public void run() {
// do something
dialog.setMessage("Change Message...");
// do more
dialog.dismiss();
// ...
Intent intent = new Intent(BookmarkActivity.this, ThreadActivity.class);
BookmarkActivity.this.startActivity(intent);
}
}.start();
Cela fonctionne presque, mais le changement du message de dialogue ne fonctionne pas. Je reçois des erreurs en disant quelque chose à propos de "fuites de fenêtres". (Je peux poster le journal complet si nécessaire).
Mes questions:
- Comment puis-je utiliser un Async tâche pour cela, où la classe a son propre fichier?
- Comment puis-je modifier le ProgressDialog de mon thread ou asyncTask sans provoquer une erreur pour modifier l'interface utilisateur dans un autre thread?
Merci à l'avance, Jan Oliver
Ok, avec l'aide de Jason, je mets ensemble cette Async tâche. Ça marche!
public class ThreadPreLoader extends AsyncTask<Object, String, Void> {
private Activity mActivity;
private ProgressDialog mDialog;
public ThreadPreLoader(Activity activity) {
mActivity = activity;
}
protected void onPreExecute() {
mDialog = new ProgressDialog(mActivity);
mDialog.setMessage("Loading...");
mDialog.show();
}
protected Void doInBackground(Object... args) {
publishProgress("Loading something else..");
return null;
}
protected void onProgressUpdate(String... msg) {
mDialog.setMessage(msg[0]);
}
protected void onPostExecute(Void result) {
mDialog.dismiss();
}
}
Merci encore, Jason.
Hey Jason, qui semble prometteur.Je vais essayer de mettre en œuvre cela et donner des commentaires plus tard! – janoliver
J'ai mis à jour mon premier post avec une implémentation de votre idée. Cela ne fonctionne pas comme il se doit. Pourriez-vous regarder le code? – janoliver
fonctionne maintenant, avait quelques bugs mineurs dans l'implémentation de AsynTask. Merci encore. – janoliver