2009-07-03 9 views
1

J'essaie de faire apparaître une boîte de dialogue depuis la méthode d'exécution, cela me donne une exception que Looper.prepare n'est pas appelée, quand j'appelle la même méthode, je n'ai aucune exception mais aucune boîte de dialogue sur la console. Comme je l'ai utilisé gestionnaire de cette façon,Afficher la boîte de dialogue de la méthode run()

handler = new Handler() { 
    public void handleMessage(Message msg) { 
     showDialog(DIALOG1_KEY); 
     // process incoming messages here 
    } 
}; 

Je ne reçois aucune exception à nouveau, mais toujours pas de chance tout organisme peut me dire où je suis en train de faire des choses mauvaises.

Répondre

3

Il est difficile de dire à partir de l'extrait de code que vous avez fourni, mais je pense que vous utilisez le gestionnaire de manière incorrecte. Ce que vous devez faire est d'initialiser un nouvel objet Handler sur leur thread principal, par exemple en le définissant comme une variable de champ.

private Handler handler = new Handler(); 

Ensuite, créez une nouvelle Runnable qui inclut les instructions que vous souhaitez exécuter sur le thread d'interface utilisateur graphique (mais qui sera appelé à partir run de votre fil d'arrière-plan méthode).

private Runnable runOnGUI = new Runnable() { 
    private void run() { 
    showDialog(DIALOG1_KEY); 
    } 
}; 

Ensuite, au sein de votre méthode run vous avez besoin d'utiliser l'objet gestionnaire pour afficher votre méthode runOnGUI sur le fil de l'interface graphique.

private Runnable runInBackground = new Runnable() { 
    private void run() { 
    handler.post(runOnGUI); 
    // Do processing 
    } 
}; 
+4

Vous pouvez également utiliser la méthode runOnUiThread (Runnable), disponible depuis Android 1.1 - elle fait exactement la même chose mais avec environ 1 ligne de code en moins. –

Questions connexes