0
votes

Comprendre comment les travaux de progressionDialog

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.

J'ai eu des problèmes différents lors de l'utilisation de ProgressDialog:

1. N'arrête pas xxx

dans ce cas avec le bouton, cliquez sur ProgressDialog apparaît mais .Dismiss () 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 () travaux.)

2. Beaucoup de travail sur maintien xxx

quand j'essaie de .join () un fil qui finit sûrement après 20 secondes, le ProgressDialog apparaît après environ 30 ans et aussi .DISMISS () ne fonctionne pas. Mais j'ai eu les informations sur le fil terminé.

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?


0 commentaires

4 Réponses :


0
votes
 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.

2 commentaires

Les threads addcustomQueue et getcostumqueue sont étendus par thread. Donc, ils doivent courir sur un fil d'arrière-plan. Je n'ai pas besoin de faire runonuthread 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



0
votes

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();


0 commentaires

1
votes

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();


5 commentaires

Alors, ce que j'ai fait, créait deux dialogues de progrès et j'essayais de .Dismiss () 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.



1
votes

1. N'arrête pas

en fait, 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>

Vous devez changer votre code comme celui-ci. 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();
                    }
                }
            });

        }
    }


1 commentaires

C'est la réponse correcte et complète. Merci, bien sûr, cela fonctionne.