2010-02-25 1 views
2

J'ai un écran frontal avec un bouton qui ouvre un deuxième écran. Le deuxième écran peut prendre quelques secondes à charger, donc je veux afficher une boîte de dialogue pendant le chargement. Mon problème est que la boîte de dialogue ne s'affiche pas lors du chargement du second écran, mais elle s'affiche lorsque je retourne à la première page de la deuxième page. Si je commente le startActivity pour ouvrir la deuxième page, la boîte de dialogue s'affiche correctement. Je suis assez nouveau pour la programmation Android - je suppose que cela a quelque chose à voir avec les threads.Afficher la boîte de dialogue lors du chargement du nouvel écran

//code snippet from inside onCreate: 
NewGame.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
//does not get displayed before 2nd page opens 
      showDialog(DIALOG2_KEY); 
//shows fine if next 2 lines commented out 
      Intent i = new Intent(screen1.this, SudukuXL.class); 
      startActivity(i); 

J'ai eu affaire à la projection de dialogue sur le retour à l'écran avant avec onPause(). J'ai essayé d'utiliser des discussions pour séparer le dialogue du startActivity mais je n'ai pas eu de chance. Toute aide serait appréciée. J'ai utilisé le code d'exemples Android pour créer une boîte de dialogue. J'inclus ci-dessous pour référence:

protected Dialog onCreateDialog(int id) { 
    switch (id) { 

     case DIALOG2_KEY: { 
      ProgressDialog dialog = new ProgressDialog(this); 
      dialog.setMessage("Loading..."); 
      dialog.setIndeterminate(true); 
      dialog.setCancelable(true); 
      return dialog; 
     } 
    } 
    return null; 
} 

Répondre

0

à mon humble avis, je préfère préfèrent utiliser ViewSwitcher au lieu de dialogue. Mais de toute façon je pense que vous devriez montrer la boîte de dialogue (ou changer de vue) dans "deuxième écran". Laissez simplement votre "deuxième" activité commencer, puis affichez la boîte de dialogue onCreate() pendant le processus de traitement, et après avoir terminé, supprimez la boîte de dialogue (ou basculez la vue). Mon conseil est d'utiliser AsyncTask ou like this pour faire quelque chose en arrière-plan !!! Aussi this topic peut vous aider

+0

J'ai testé où le retard se produit. Il s'agit en fait de construire XML - il y a 81 editTexts dans une table. Dans l'émulateur sur mon PC - en utilisant une classe java vide mais le même xml cela prend 2 secondes à afficher. Avec la classe java complète ajoutée, cela prend environ 3 secondes. Est-il possible d'afficher le dialogue ou ViewSitcher sur le deuxième écran lors de la construction de XML? - Je vais essayer. – darkdusky

+0

Donc le problème est dans le temps que prend l'émulateur pour rendre votre vue? Ai-je raison? Je ne sais pas ce que vous essayez de développer mais je préfère utiliser quelque chose comme Adapter avec des vues énormes avec de nombreux éléments. L'avantage des adaptateurs et de AdapterView est que vous pouvez rendre une partie visible de la vue et des données. vérifier les docs. http://developer.android.com/reference/android/widget/Adapter.html – ponkin

+0

Merci pour vos conseils - Je suis en train de faire un jeu de sudoku donc 81 édits individuels. Devrais-je abandonner ma tentative de diviser setContentView et showDialog en différents threads (voir ci-dessous)? – darkdusky

0

J'ai essayé d'afficher une boîte de dialogue jusqu'à xml rempli mais ne l'ai pas tout à fait raison. Voici une façon que j'ai essayé:

public void onCreate(Bundle icicle) 
      { 
      super.onCreate(icicle); 
      showDialog(DIALOG2_KEY); 

      new Thread(new Runnable(){ 
        public void run(){ 
         setContentView(R.layout.saved); 
        } 
       }).start(); 
       // removeDialog(DIALOG2_KEY); 

J'ai essayé quelques autres façons de contourner ce qui est y compris la substitution fil à l'intérieur et à l'ordre d'exécution, etc. Aucun des moyens fonctionne. Le code ci-dessus montre le dialogue rapidement (excellent), mais se bloque ensuite.