125

スレッドからトーストメッセージを表示するにはどうすればよいですか?

4

12 に答える 12

256

スレッドからActivityのメソッドを呼び出すことで実行できます。runOnUiThread

activity.runOnUiThread(new Runnable() {
    public void run() {
        Toast.makeText(activity, "Hello", Toast.LENGTH_SHORT).show();
    }
});
于 2010-06-28T17:37:15.537 に答える
67

どこからでも呼び出すことができるメソッドを自分のアクティビティに含めるのshowToastが好きです...

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

MyActivity次に、このようなスレッド内から最も頻繁に呼び出します...

showToast(getString(R.string.MyMessage));
于 2012-10-15T14:06:32.153 に答える
32

これは他の回答と似ていますが、新しい利用可能な API 用に更新され、よりクリーンになりました。また、アクティビティ コンテキストにいるとは限りません。

public class MyService extends AnyContextSubclass {

    public void postToastMessage(final String message) {
        Handler handler = new Handler(Looper.getMainLooper());

        handler.post(new Runnable() {

            @Override
            public void run() {
                Toast.makeText(getContext(), message, Toast.LENGTH_LONG).show();
            }
        });
    }
}
于 2015-12-10T23:12:05.180 に答える
10

これまたはこれのように、Runnableを示す が付いていますToast。すなわち、

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();
}
于 2010-06-28T17:35:42.660 に答える
3

Looperメッセージの送信に使用できToastます。詳細については、このリンクを参照してください。

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();
}

そしてそれはあなたのスレッドで呼び出されます。コンテキストは、トーストを表示する必要があるActivity.getContext()ことから得られている可能性があります。Activity

于 2014-05-09T05:43:03.037 に答える