2010-07-26 3 views
1

J'utilise une barre de progression dans android, de sorte que jusqu'à ce que mes données soient chargées, l'utilisateur reçoit une rétroaction adéquate de ce qui se passe. le code de la barre est au-dessous:L'utilisation de la barre de progression finit par ne pas remplir la vue par liste

final ProgressDialog myProgressDialog; 

myProgressDialog = ProgressDialog.show(ListingPage.this,"Please Wait", "Loading Date", true); 
new Thread() { 
    public void run() { 
     try{ 
     setSelected();      
     sleep(5000); 
     } catch (Exception e) { } 
     myProgressDialog.dismiss(); 
    } 
}.start(); 

Procédé setSelected() est l'insertion de données dans une liste de réseau, puis la création d'un adaptateur de réseau, puis en utilisant un affichage de liste pour afficher ces éléments. Donc quand je mets la méthode setSelected() dans la barre de progression, elle montre le cercle de chargement, mais une fois le chargement terminé. Rien n'est affiché dans listview. Mais si j'enlève le code barre de progression (méthode thread et run), et que j'appelle simplement la méthode setSelected(), la listview déclare les données avec succès. jusqu'à présent, il conclut que le code à barres de progrès est en train de faire quelque chose ... Je voulais donc savoir s'il me manque quelque chose à ajouter ou à retirer du code. J'ai besoin de la barre de progression de l'émission pendant que je lis les données de la source en ligne et cela prend du temps, ce qui peut rendre l'utilisateur mal à l'aise.

Répondre

1

Le problème pourrait être que vous essayez de changer l'interface utilisateur d'un autre thread, puis le fil de l'interface utilisateur, ce n'est pas possible dans Android.

Je suggère d'essayer l'utilisation d'un Async Task. Asynct Task vous donne la possibilité de faire quelque chose dans un thread d'arrière-plan et de publier les résultats dans le thread d'interface utilisateur une fois terminé. Pour cela, je voudrais séparer la méthode setSelected dans deux méthodes une qui obtient les données et crée le tableau et tout le reste et celui qui crée l'adaptateur et publie les résultats à la liste.

myProgressDialog = ProgressDialog.show(ListingPage.this,"Please Wait", "Loading Date", true); 

final Result[] results = new Result[](); 

new AsyncTask<Void, Void, Void>() { 

    //This is done in the background 
    protected Void doInBackground(Void... params) { 
     results = getResults(); 
     return null; 
    } 

    //This id done in the UI Thread 
    protected void onPostExecute(Long result) { 
     publishResults(); 
     myProgressDialog.dismiss(); 
    } 

    } 
}.execute(); 
+0

Janusz! J'ai utilisé la méthode que vous avez dit ci-dessus mais, la barre de recherche se bloque sur le chargement du code est: nouvelle AsyncTask () { // Ceci est fait en arrière-plan protected Void doInBackground (Void ... params) { setSelected(); return null; } // Cet ID est effectué dans le thread d'interface utilisateur protected void onPostExecute (Résultat long) { populateList (data); myProgressDialog.dismiss(); } } .execute(); Je suppose que le fil est suspendu .. est-ce ?? – kaibuki

+0

désolé j'ai besoin de plus de code alors ceci pour vraiment trouver une erreur ici. Essayez de l'éditer dans votre question d'origine – Janusz

Questions connexes