2010-06-15 4 views
2

J'ai un problème avec mon ListActivity, j'utilise un thread pour afficher un ProgressDialog où obtenir une liste de toutes les applications installées. Je le transforme en un adaptateur de liste et que je veux mettre le listadapter de l'activité mais je ne peux pas faire cela du fil.appel setListAdapter() à partir d'un thread

je reçois l'erreur suivante: ERROR/AndroidRuntime(14429): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

progressDialog = new ProgressDialog(this); 
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
progressDialog.setMessage("Loading..."); 
progressDialog.show(); 
new Thread() { 
     public void run() { 
       showList(); // the method where i get all the apps and have the setListAdapter(); method 
       progressDialog.dismiss(); 
     } 
}.start(); 

Comment puis-je l'obtenir, je peux donc utiliser le setListAdapter à l'intérieur de mon fils

Répondre

2

Je l'ai résolu, en utilisant un Handler j'ai réussi à sortir le setListAdapter du Thread et j'attendais toujours que le Thread exécute la méthode.

final Handler h = new Handler(){ 
    public void handleMessage(Message msg) { 
     setListAdapter(appsAdapter); 
    }   
}; 

new Thread() { 
    public void run() { 
     showList(); 
     progressDialog.dismiss(); 
     h.sendEmptyMessage(0); 
    } 
}.start(); 
+0

reaaly utile merci ... – Ravi

2

La meilleure façon de le faire est d'utiliser la méthode runOnUiThread de l'activité :

runOnUiThread(new Runnable() { 
    public void run() { 
     showList(); 
     progressDialog.dismiss(); 
    } 
}); 

Modifier: changé discussion Exécutable

+1

Vous devriez créer un nouveau Runnable, pas un nouveau thread. –

+0

Les deux ne fonctionnaient pas car mon ProgressDialog n'apparait plus, c'était la raison principale pour placer la méthode dans un thread séparé. –

+0

où est le code pour progressDialog.show()? –

Questions connexes