2010-04-15 4 views
1

J'utilise le code ci-dessous où, je veux montrer le dialogue à l'avant et charger le contenu en arrière-plan, mais pas en mesure de faire la même chose. S'il vous plaît donnez votre avis.montrant le dialogue lors du chargement de la mise en page par setContentView en arrière-plan

dialog = ProgressDialog.show(this, "", "Loading. Please wait...", true); 
runOnUiThread(new Runnable(){ 
    public void run() { 
    setContentView(R.layout.main_layout); 
    dialog.dismiss(); 
    } 
}); 

Répondre

6

J'obtenu une solution en lisant lien ci-dessous et mis en œuvre le code ci-dessous: http://developer.android.com/guide/appendix/faq/commontasks.html#threading

int glb=0,glbtotal=3; 
final Handler mHandler = new Handler(); 

// Create runnable for posting 
final Runnable mUpdateResults = new Runnable() { 
    public void run() { 
     updateResultsInUi(); 
    } 
}; 

public void open_next_screen() 
    { 
      dialog = ProgressDialog.show(this, "", "Loading. Please wait...", true); 
      startLongRunningOperation(); 
    } 
private void updateResultsInUi() { 

    // Back in the UI thread -- update our UI elements based on the data in mResults 
    switch(glb) 
    { 
    case 0: 
     setContentView(R.layout.main_layout); 
      getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title); 

     break; 
    case 1: 
    part2(); 

    break; 
    case 2: 
    part3(); 

    break; 
    } 

} 

protected void startLongRunningOperation() { 

    // Fire off a thread to do some work that we shouldn't do directly in the UI thread 
    Thread t = new Thread() { 
     public void run() { 


      for(glb=0;glb<glbtotal;glb++) 
      { 
       mHandler.post(mUpdateResults); 

      switch(glb) 
      { 
      case 0: 
       part1(); 
       break; 

      } 
      } 
       dialog.dismiss(); 
     } 
    }; 
    t.start(); 
} 
+1

Mec, avec un tel codage, ton karma ne va pas durer plus longtemps. Merci quand même :) – Dennis

1

Il y a un exemple de la façon de faire le chargement dans un thread séparé sur la Android developer's website. Pour voir le code actuel, développez la vue à la fin de la section sur les boîtes de dialogue de progression. Toutefois, pour votre situation particulière, vous devez retravailler la façon dont vous faites les choses. Qu'est-ce qui prend si longtemps que vous avez besoin d'un dialogue de progrès pour cela? Vous devriez le charger dans le 2ème thread, tout en affichant une sorte de mise en page temporaire avec setContentView. Ensuite, une fois que le thread a terminé le chargement, appelez à nouveau setContentView ou modifiez le texte, les images ou tout ce que vous avez chargé avec le thread.

Enfin: Si vous êtes vraiment novice dans la programmation sous Android, j'éviterais d'utiliser des threads séparés et des choses compliquées pour le moment. C'est un peu difficile à faire et il y a beaucoup à comprendre en premier.

+0

En fait, ma première activité APPELLE deuxième activité qui charge les données dans la méthode onCreate qui prend pour beaucoup de temps. Donc, instaed d'appeler la deuxième activité en utilisant Intent, je veux simplement changer le contenu et charger les données pertinentes dans le fil en montrant la barre de progression. – Maneesh

0

Cela ressemble à un écran de démarrage ou autre chose, mais la définition de la vue du contenu ne doit pas être effectuée dans un fil de discussion. Postez le fichier layout.xml, ce qui est en train de le prendre si longtemps.

+0

J'ai créé deux activités, la première activité appelle la seconde qui charge les données, modifie les propriétés des contrôles etc dans son Oncreate(). Donc, au lieu d'appeler le second par le premier, à la fin de la première, je change simplement la disposition du premier et charge les données en utilisant le fil en montrant le dialogue de progression. Mais niether je suis capable de changer la disposition dans la classe de fil, ni je suis capable de charger des données dans les contrôles dans le fil. Aucune suggestion? – Maneesh

Questions connexes