Comment afficher un dialogue Progress entre deux activités?

J'ai un problème. Je dois passer d'une activité à l'autre. Ma deuxième activité a une grande mise en page xml, avec beaucoup d'éléments (je parle de quatre cents approximativement), puis il faut quelques secondes (trop) pour montrer cette seconde activité.

Comment afficher un dialogue Progress entre deux activités?

  • Android: comment utiliser un réseau Wifi pour des hôtes spécifiques, mais ont un téléphone portable. Réseau mobile pour tout le reste
  • Transfert d'appels vidéo Qt mobile
  • NullPointerException dans handleStopActivity - Aucune référence à mon code dans la trace de la pile
  • Modification de la couleur de fond translucide de progressbar android
  • Comment changer le nom de l'application par type de compilation Gradle
  • ViewSwitcher et la hauteur de mise en page dans Android
  • J'essaie d'utiliser une tâche de fond pour le faire.

    J'ai cette méthode dans mon Activité A:

    private void goToYear() { Intent intent = new Intent(); intent.setClass (getBaseContext(), YearActivity.class); startActivity( intent); } 

    Et dans mon Activité B:

     public class YearActivity extends Activity { private String TAG = "YearActivity ::"; private ProgressDialog pd = null; @Override public void onCreate( Bundle savedInstanceState) { super.onCreate( savedInstanceState); // Show the ProgressDialog on this thread this.pd = ProgressDialog.show(this, "Working...", "Calculating the screen...", true, false); // Start a new thread that will download all the data new MakeYearTask().execute(); } private void initCalendar () { this.setContentView( R.layout.calendar_year); ... ... initialize values ... ... } private class MakeYearTask extends AsyncTask<String, Void, Object> { protected Void doInBackground(String... args) { Log.i("YearActivity::MakeYearTask", "MakeYearTask Background thread starting"); YearActivity.this.initCalendar(); } protected void onPostExecute(Object result) { if (YearActivity.this.pd != null) { YearActivity.this.pd.dismiss(); } } } } 

    Vous pouvez voir que je setContentView le setContentView hors de la méthode onCreate .

    Cela ne fonctionne pas. Cela me donne une exception, comme ceci:

     12-09 19:49:17.729: ERROR/AndroidRuntime(218): java.lang.RuntimeException: An error occured while executing doInBackground() 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at android.os.AsyncTask$3.done(AsyncTask.java:200) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:234) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:258) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at java.util.concurrent.FutureTask.run(FutureTask.java:122) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:648) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:673) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at java.lang.Thread.run(Thread.java:1060) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): Caused by: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at android.view.ViewRoot.checkThread(ViewRoot.java:2629) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at android.view.ViewRoot.requestLayout(ViewRoot.java:545) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at android.view.View.requestLayout(View.java:7657) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at android.view.ViewGroup.addView(ViewGroup.java:1749) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at android.view.ViewGroup.addView(ViewGroup.java:1731) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at com.android.internal.policy.impl.PhoneWindow.generateLayout(PhoneWindow.java:2186) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:2239) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:309) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at android.app.Activity.setContentView(Activity.java:1620) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at es.jota.app.YearActivity.initCalendar(YearActivity.java:42) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at es.jota.app.YearActivity.access$0(YearActivity.java:41) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at es.jota.app.YearActivity.initCalendar$MakeYearTask.doInBackground(YearActivity.java:120) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at es.jota.app.YearActivity.initCalendar$MakeYearTask.doInBackground(YearActivity.java:1) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at android.os.AsyncTask$2.call(AsyncTask.java:185) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:256) 12-09 19:49:17.729: ERROR/AndroidRuntime(218): ... 4 more 

  • Le problème d'orientation AdMob dans Android
  • GetSupportFragmentManager () est indéfini
  • Le lecteur de Google Drives de données de l'application retourne vide lorsque j'utilise queryChildren
  • Ecriture de fichiers sur un stockage externe dans Android échouant
  • Existe-t-il un moyen de créer des jeux xxhdpi, xhdpi, hdpi, mdpi et ldpi à partir d'une image à grande échelle?
  • Les valeurs de mise en cache de SharedPreferences ont-elles un sens?
  • 4 Solutions collect form web for “Comment afficher un dialogue Progress entre deux activités?”

    C'est un design médiocre pour commencer. Si vous disposez d'une quantité importante de données à présenter à l'utilisateur qui devrait vraisemblablement être déroulé, vous devriez plutôt utiliser une sous-classe AdapterView , comme ListView ou GridView . Une mise en page XML avec près de 400 éléments est incroyablement grande.

    Je comprends ce que vous essayez de faire (vous essayez d'effectuer le long bâtiment de la hiérarchie massive de View sur un Thread séparé à l'aide d'un AsyncTask , mais ce que vous avez trouvé, c'est qu'il a explosé sur vous pour essayer de toucher le View hiérarchie sur un Thread non UI).

    Même si vous avez réussi à implémenter une sorte de barre de progression au premier plan pendant que la hiérarchie est en cours de construction, je ne sais pas si le système fournirait les moyens de rappeler les informations de progression alors qu'il gonfle la hiérarchie View (mais je peux être faux).

    AdapterView été créé pour résoudre exactement ce type de problème. Avec un AdapterView , généralement, seule une valeur d'affichage des Views existe en mémoire à tout moment. Par exemple, vous pouvez avoir une table avec mille lignes, mais avec seulement sept lignes adaptées à l'écran à la fois, seules huit lignes View s peuvent exister en mémoire à la fois. En outre, l'adaptateur devrait également recycler les View s, optimisant encore les performances.

    Ce n'est peut-être pas la meilleure solution, mais ce que vous pouvez faire, c'est d'étendre le thème de base utilisé dans Android et de définir l'arrière-plan de la fenêtre sur une image qui indique que l'activité est en cours de chargement. Ensuite, définissez ce thème dans l'Activité B. Maintenant, pendant que l'Activité B est en cours de chargement, il apparaîtra votre fenêtre dessinable au lieu de la fenêtre noire. Vous pourriez peut-être être créatif avec une liste d'animation et obtenir une sorte d'effet de chargement indéterminé.

    Avez-vous essayé de faire de new MakeYearTask().execute(); Dans onResume () à la place?

    Même si vous n'êtes pas élégant, vous pouvez lancer un poste retardé sur créer pour attendre quelques millis.

    Modifier:

    J'ai juste cette erreur:

     (Caused by: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views) 

    Modifiez-vous l'interface utilisateur de l'AsyncTask?

    Vous devez simplement créer les données dans doInBackground() , mais mettre à jour l'ui sur onPostExecute() .

    Votre formatage est un peu éteint, mais si je comprends bien, vous appelez initCalendar() dans le AsyncTask votre doInBackground() . Vous n'êtes pas autorisé à le faire avec AsyncTask s.

    Utilisez doInBackground() pour les opérations à long terme telles que les appels HTTP, les accès aux initCalendar() données, etc. Une fois que vous disposez des éléments nécessaires, appelez initCalendar() de onPostExecute() .

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.