Boîte de Dialogue de progression de l'utilisation avec Fil
voici mon code,
public ProgressDialog loadingdialog;
public void ShowManager() {
//do something
}
public void startScan() {
loadingdialog = ProgressDialog.show(WifiManagementActivity.this,
"","Scanning Please Wait",true);
new Thread() {
public void run() {
try {
sleep(4000);
ShowManager();
} catch(Exception e) {
Log.e("threadmessage",e.getMessage());
}
loadingdialog.dismiss();
}
}.start();
}
startScan();
Une base progressdialog fonction, mais sur la ligne où ShowManager() est appelée, d'avoir d'erreur ,
01-07 23:11:36.081: ERROR/threadmessage(576): Only the original thread
that created a view hierarchy can touch its views.
EDIT:
ShowManager() est une fonction qui permet de changer la vue des éléments. peu de temps quelque chose comme,
public void ShowManager()
{
TextView mainText = (TextView) findViewById(R.id.wifiText);
mainText.setText("editted");
}
OriginalL'auteur ocanal | 2012-01-07
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la réponse. Je n'aime pas à répondre à ma propre question, mais peut-être cette aider quelqu'un d'autre. Nous ne pouvons pas mettre à jour la plupart des objets de l'INTERFACE utilisateur, le tout dans un thread séparé. Nous devons créer un gestionnaire et mise à jour de la vue à l'intérieur d'elle.
OriginalL'auteur ocanal
utiliser ce lieu de juste loadingdialog.rejeter()
ainsi, au lieu de loadingdialog.rejeter mettre showmanager() dans la réponse ci-dessus, cela devrait fonctionner
OriginalL'auteur nandeesh
C'est parce que vous tentez de fermer la boîte de dialogue à partir du thread, alors qu'il a été créé dans le main thread d'INTERFACE utilisateur. Essayez de déplacer le
ProgressDialog.show
déclaration à l'intérieur du Fil. Je préfère utiliser AsyncTask, car ils sont beaucoup plus simple à gérer que dans ce exempledonc, après le code de showmanager
J'ai édité.
OriginalL'auteur Mohamed_AbdAllah
quelque chose comme cela, c'est "ok":
noter la position de ProgressDialog.montrer(...), voici la boîte de dialogue.rejeter() est appelée dans le thread qui a créé la boîte de dialogue.
mais la façon la plus propre à réaliser que c'est en utilisant AsynTask
OriginalL'auteur likide