127 votes

Android : Toast dans un fil

Comment puis-je afficher Toast les messages d'un fil de discussion ?

261voto

Lauri Lehtinen Points 5417

Vous pouvez le faire en appelant une Activity 's runOnUiThread de votre fil :

activity.runOnUiThread(new Runnable() {
    public void run() {
        Toast.makeText(activity, "Hello", Toast.LENGTH_SHORT).show();
    }
});

72voto

mjaggard Points 1020

J'aime avoir une méthode dans mon activité appelée showToast que je peux appeler de n'importe où...

public void showToast(final String toast)
{
    runOnUiThread(new Runnable() {
        public void run()
        {
            Toast.makeText(MyActivity.this, toast, Toast.LENGTH_SHORT).show();
        }
    });
}

Je l'appelle ensuite le plus souvent de l'intérieur MyActivity sur un fil comme celui-ci...

showToast(getString(R.string.MyMessage));

10voto

yanchenko Points 24142

Comme ce ou ce avec un Runnable qui montre le Toast . A savoir,

Activity activity = // reference to an Activity
// or
View view = // reference to a View

activity.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        showToast(activity);
    }
});
// or
view.post(new Runnable() {
    @Override
    public void run() {
        showToast(view.getContext());
    }
});

private void showToast(Context ctx) {
    Toast.makeText(ctx, "Hi!", Toast.LENGTH_SHORT).show();
}

7voto

Hugo Points 195
        try {
            new Thread() {
                @Override
                public void run() {
                    Looper.prepare();
                    Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();
                    Looper.loop();
                }
            }.start();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

3voto

Vinoj John Hosan Points 160

J'ai juste traversé ce lien et j'ai eu l'idée du looper et j'ai créé ceci

public void showToastInThread(final Context context,final String str){
    Looper.prepare();
    MessageQueue queue = Looper.myQueue();
    queue.addIdleHandler(new IdleHandler() {
         int mReqCount = 0;

         @Override
         public boolean queueIdle() {
             if (++mReqCount == 2) {
                  Looper.myLooper().quit();
                  return false;
             } else
                  return true;
         }
    });
    Toast.makeText(context, str,Toast.LENGTH_LONG).show();      
    Looper.loop();
}

et il est appelé dans votre thread. Le contexte peut être Activity.getContext() obtenu à partir de l'activité que vous avez pour montrer le toast.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X