Comment montrer ProgressDialog à travers le lancement d'une nouvelle Activité?
Objectif: Avoir un ProgressDialog qui affiche "Chargement..." jusqu'à la prochaine Activité est entièrement chargé et affiché sur l'écran.
Essayé avec ProgressDialog contexte et de l'activité de l'ensemble de départ de l'Activité. Aussi essayé avec getcontexteapplication() et getParentContext(). Des Exceptions sur les deux dernières approches. Besoin pour ce faire comme destination Activité est lente à se rendre en raison de la non-Mise en page simple fichier. (Ne peut pas résoudre ça, maintenant, en raison de problèmes d'organisation.) S'avère que la destination de l'Activité dure 1 à 2 secondes pour OnCreate et ensuite l'écran devient noir pendant plus de 5 secondes alors qu'il peint. Le rendu est juste lent. N'en revue avec la Hiérarchie de Spectateur et de voir beaucoup de boules rouges, mais ne peut pas réparer maintenant.
Lire sur certaines liés, mais n'ai pas trouvé une solution. E. g. Quelle est la différence entre les différentes méthodes pour obtenir un Contexte?
E. g. ces deux crash. À l'aide de la "ce" de la source de l'Activité ne fonctionne pas non plus.
//Context parentContext = this.getParent().getBaseContext();
Context parentContext = this.getApplicationContext();
ProgressDialogMenuable theProgressDialog = new ProgressDialogMenuable(parentContext,this);
theProgressDialog.setTitle("yeeha");
theProgressDialog.setMessage("weewah");
theProgressDialog.setIndeterminate(true);
theProgressDialog.setCancelable(true);
theProgressDialog.show();
Aussi, bizarrement, rien ne se passe lorsque je fais ceci:
theProgressDialog.show();
ActivityHelper.changeActivity(ce, v, InsMyHoldingsActivity.class, extraMap, -1, -1);
L'utilisateur clique sur le bouton à côté de l'activité, mais la ProgressDialog conflits avec l'Activité de lancement et rien de ce qui se passe en réalité autre que le bouton devient jaune ontouch. Bouton ci-dessous fonctionne. retrait ProgressDialog création et il fonctionne. Pas de messages sur la console connecté. Un peu offputting le développeur pour vous.
Laissez-moi essayer. Situation où je ne peux que sous-classe (pas de changement) à destination de l'Activité. Donc, cela pourrait fonctionner.
Si vous publiez en tant que solution, alors je vais accepter. Je ne pense pas que le ProgressDialog peut s'étendre à des Activités de cycle de vie (plus d'une Activité); mais on peut en effet à l'utilisateur avec cette approche, On PDlg de l'Activité par Un, puis un autre dans ActivityB comme vous l'avez dit. J'ai utilisé une syntaxe différente de la AsynTask mais sémantiquement c'est la même chose je crois. final Runnable r = new Runnable() { public void run() { setupActivityDisplay(); // thig qui prend un certain temps theProgressDialog.rejeter(); } }; (new Handler()).postDelayed(r, 1000);
Plus de recherches suggèrent qu'il y a aucun moyen de montrer une ProgressDialog avant l'Activité Mise en page en cours d'achèvement. Il suffit de mettre, avec un plan complexe, le utilisateur voit apparaître un écran noir (vide) depuis un certain temps. Encore en recherche.
Il y a une façon de montrer la ProgressDialog. Après onCreate. Il suffit de retirer la mise en page setContentView( appel de onCreate. Le faire plus tard.
OriginalL'auteur maxweber | 2012-10-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez afficher une boîte de dialogue de progression, ce
Définir ce
dans votre classe d'activité
Mettre ceci dans votre onCreate (Dont setContentView directement ici)
//Fond de levage lourd
Également passer par ce :http://developer.android.com/training/improving-layouts/index.html pour l'optimisation de la mise en page de la performance.
Également Utiliser Traceview à regarder pour les goulets d'étranglement
Pas de problème. Veuillez accepter comme réponse si il résolu votre problème, et bienvenue 🙂
OriginalL'auteur Vrashabh Irde
Il y a deux façons de
Première approche De l'utilisation Async Task
Si vous faites des tâches lourdes par exemple le chargement de données à partir du serveur ou de l'analyse de xml dans ce cas, l'utilisation AsynTask<> Si vous voulez l'appeler ActivityB de ActivityA puis
*étape 1*créer une classe AsyncTask. écrire toutes les tâches en arrière-plan à l'intérieur de doBackground() la méthode et après l'achèvement de la tâche que vous voulez l'appeler une activité que le code d'écriture à l'intérieur de onPostExecute() après exécution de la méthode
étape 2 Dans l'activité bof où vous voulez passer à la nouvelle activité (par exemple dans le ActivityA), appeler le execute() de AsynTask
Deuxième approche
Premier spectacle de dialogue de progression.
créer un thread pour faire toutes les tâches en arrière-plan. lorsque le thread se termine la tâche, puis annulez la boîte de dialogue de progression et d'appeler la prochaine activité
ou
lorsque le thread complets de la tâche, puis appelez la prochaine activité de transmettre cet objet (boîte de dialogue de progression) et à l'intérieur de cette nouvelle activité de rejeter cette boîte de dialogue.
Ressemble, il peut être possible avec un ActivityGroup mais qui est obsolète maintenant. developer.android.com/reference/android/app/ActivityGroup.html
A la mise en page de rendu dans un AsyncTask comme première affiche m'a dit de faire. Elle fonctionne.
OriginalL'auteur Jay
Voici mon code qui peut vous aider.
Dans ce domaine, je ne suis qu'à la validation de la première méthode de
AsyncTask
je.eonPreExecute
.User_AsyncTask extends AsyncTask:
OriginalL'auteur Vaibhav Joshi