2013-03-19 6 views
0

J'ai un IntentService qui crée une superposition à l'aide d'un WindowManager. Dans le WindowManager, j'ajoute une vue qui contient un ListView. Maintenant, je veux ajouter un nouvel élément à la ListView dans la méthode onHandleIntent mais si je l'appelleMise à jour ListView à partir IntentService

data.add("String"); 
adapter.notifyDataSetChanged(); 

le système génère une erreur

Only the original thread that created a view hierarchy can touch its views. 

Que puis-je faire pour empêcher cela?

+0

Jetez un oeil à [les fournisseurs de contenu] (http://developer.android.com/guide/topics/providers/content-providers.html). Ils t'aideraient. –

+0

créer un gestionnaire dans onStart, puis afficher sur ce gestionnaire un message pour mettre à jour la vue, si je comprends bien ce que vous faites. – njzk2

Répondre

0

Vous pouvez résoudre ce problème en laissant l'activité qui contient ListView effectuer la mise à jour. Activity.runOnUiThread() devrait faire le travail =]

+0

Je ne vois pas où j'ai une activité là-bas ... Je n'ai que l'IntentService avec la superposition – Cilenco

1

L'écran ne peut être mis à jour que par le thread UI. Un service ne peut pas garantir qu'il s'exécute dans le thread d'interface utilisateur. Par conséquent, un service peut ne pas mettre à jour l'écran directement.

La solution consiste à envoyer un message au thread de l'interface utilisateur. Il y a plusieurs façons de le faire. Voici un:

En onCreate() pour l'activité attachée à l'écran créer un gestionnaire de messages:.

mHandler = new Handler(Looper.getMainLooper()) { 
    @Override 
    public void handleMessage(Message inputMessage) { 
     Update the UI here using data passed in the message. 
    } 
    } 

Faire mHandler disponible au service (peut-être via l'intention utilisée dans StartService()

au service envoyer le message au gestionnaire:

Message msg = mHandler.obtainMessage(...); 
     ... add info to msg as necessary 
    msg.sendToTarget(); 

Ces pages peuvent aider les détails:

http://developer.android.com/reference/android/os/Handler.html

et

http://developer.android.com/reference/android/os/Message.html

Questions connexes