Je travaille avec un appareil avec Fix API 23 et parce que je pensais qu'il serait facile que je voulais utiliser progresssialog car il est toujours disponible.
J'ai essayé de démarrer un fil qui doit faire beaucoup de travail et Il fait cela que l'utilisateur doit attendre. P>
J'ai eu des problèmes différents lors de l'utilisation de ProgressDialog: P>
dans ce cas avec le bouton, cliquez sur ProgressDialog apparaît mais quand j'essaie de Le style que je veux utiliser est le second, mais j'ai besoin d'une bonne façon de le faire.
Quelle est la bonne façon d'utiliser cela? P> p> .Dismiss () code> ne fonctionne pas. (Je sais que le progessdialog devrait fermer immédiatement même lorsque le thread n'est pas terminé. Je voulais juste savoir si
.Dismiss () code> travaux.) P>
2. Beaucoup de travail sur maintien h1>
.join () code> un fil qui finit sûrement après 20 secondes, le ProgressDialog apparaît après environ 30 ans et aussi
.DISMISS () code> ne fonctionne pas. Mais j'ai eu les informations sur le fil terminé. P>
4 Réponses :
new Thread(new Runnable() { @Override public void run() { // Here you can do your background task for processing data that may take seconds addCustomQueue.start(); getCustomQueue.start(); try { addCustomQueue.join(); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); runOnUiThread(new Runnable() { @Override public void run() { // Here you can put code for UI changes that display on screen if (mProgressDialog.isShowing()) { mProgressDialog.dismiss(); } } }); You can mange it by proper multi threding performance here i provide you example only because of i dont know you functionality and your code.
Les threads addcustomQueue code> et
getcostumqueue code> sont étendus par thread. Donc, ils doivent courir sur un fil d'arrière-plan. Je n'ai pas besoin de faire
runonuthread code> parce que j'ai déjà déjà démarré le progressiste sur MainThread.
Donc, quel est un problème que vous êtes survenu principalement que vous n'avez pas à mentionner correctement ou à mettre à jour votre question
Vous devriez écrire ci-dessous le code avant de démarrer vos travaux:
final ProgressDialog pd = new ProgressDialog(this); pd.setMessage("Processing..."); pd.setCancelable(false); pd.show();
Vous créez deux ProgressDialog CODE> Objets.
//Instead of
//ProgressDialog mProgressDialog = new ProgressDialog(this);
//mProgressDialog.show(this,"Title","Message",true);
//use
ProgressDialog mProgressDialog = ProgressDialog.show(this,"Title","Message",true);
//Now, you'll be able to dismiss it
mProgressDialog.dismiss();
Alors, ce que j'ai fait, créait deux dialogues de progrès et j'essayais de .Dismiss () code> celui que je n'ai jamais initialisé?
Vous avez créé deux dialogues, ouvrit la seconde et essayé de fermer la première (au lieu de la seconde).
Je vois. Merci, je vais essayer cela directement. Passe une bonne journée.
Cool, marque ma réponse aussi correcte si cela fonctionne. Acclamations.
Votre réponse est correcte, mais la réponse de @zumikua est complètement confrontée à mon problème.
en fait, Vous devez changer votre code comme celui-ci. P> progresssialog.show (contexte, chaîne, chaîne, booléen) code> est une méthode statique, elle crée un nouveau progressableDialog et le renvoie après l'avoir montrée. P>
class AddCustomQueueThread extends Thread {
final WeakReference<MainActivity> activity;
final Handler handler;
AddCustomQueueThread(MainActivity act) {
activity = new WeakReference<>(act);
handler = new Handler(Looper.getMainLooper());
}
@Override
public void run() {
super.run();
//do your work.
handler.post(new Runnable() {
@Override
public void run() {
MainActivity act = activity.get();
if(act != null) {
act.dismissProgressDialog();
}
}
});
}
}
C'est la réponse correcte et complète. Merci, bien sûr, cela fonctionne.