2010-11-29 8 views
1

J'ai un toast dans un thread esclave qui doit indiquer à un utilisateur quand une connexion est établie. Pour ce faire, je sais que je dois utiliser Async pour faire le toast, mais je ne sais pas où et comment implémenter l'async étendu. Si je comprends bien, je pense que je peux simplement créer un MyAsync avec le toast et simplement onProgressUpdate().Toast et Async

@Override 
public void onProgressUpdate(String... args) { 

     Toast.makeText(context, args, Toast.LENGTH_SHORT).show(); 
} 

Merci pour votre temps ~ Aedon

+0

Il ne fait pas vraiment de sens. Voulez-vous montrer le progrès dans un Toast? –

Répondre

1

Eh oui, vous devriez être en mesure d'étendre juste le AsyncTask et modifier les variables de modèle à ce que vous avez besoin. La classe Toast est une classe statique, elle peut donc être appelée depuis n'importe quel thread sans se soucier des conflits.

Je ne vois aucun problème avec votre code ci-dessus, sauf que vous ne voudriez pas appeler de nouveaux messages Toast très souvent depuis leur empilement. Donc, si vous appeliez continuellement la fonction .show(), elle les empilerait et continuerait à afficher de nouveaux messages Toast à chaque intervalle LENGTH_SHORT jusqu'à ce qu'elle soit rattrapée.

Comme un exemple d'un AsyncTask, ici vous allez:

private class MyAsync extends AsyncTask<<What to pass in to doInBackground>, <What to pass in to onProgressUpdate>, <What type onPostExecute receives>> { 
    protected T (result type to onPostExecute) doInBackground(T... urls) { 
     //Do big calculations in here 
    } 

    protected void onProgressUpdate(T... progress) { 
     //Update 
    } 

    protected void onPostExecute(T result) { 
     //Done 
    } 
} 
+0

Je ne suis pas sûr de savoir ce que fera un message Toast dans onProgressUpdate. Si l'OP a des problèmes, voir cette question: http://stackoverflow.com/questions/4209814/posting-toast-message-from-a-thread (ceci utilise Thread et non AsyncTask, mais vous pouvez toujours parler à l'interface utilisateur thread de la même manière – Andrew

+0

kk ty beaucoup Tout ce que je fais pour faire le toast est nouveau MyAsync(). execute (mContext, aString, void), et il est grillé? – AedonEtLIRA

+0

Si vous voulez juste afficher un message Toast et ne pas faire Tout autre traitement dans AsyncTask vous pouvez simplement appeler Toast.makeText (...). show() dans votre thread UI car il est non-bloquant.Pas besoin de faire un fil complet juste pour afficher un message Toast. – SpencerElliott