在SurfaceView中吐司

Fis*_*her 3 java android surfaceview toast

我想在SurfaceView类中使用Toast创建一条消息.使用此代码,我有以下例外...

Toast toast = Toast.makeText(this.getContext(), "Message", Toast.LENGTH_LONG);
        toast.show();
Run Code Online (Sandbox Code Playgroud)

11-05 02:06:08.070:ERROR/AndroidRuntime(265):java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序

我怎样才能在SurfaceView中干杯?

Kev*_*gan 5

您需要使用UI线程显示Toast.每当初始化SurfaceView时,请执行以下操作:

Handler handler;
private void initMe()
{
    handler = new Handler();
}
Run Code Online (Sandbox Code Playgroud)

然后,无论你想在哪里做吐司,都要这样做:

handler.post(new Runnable(){
    public void run(){
        Toast.makeText(context, "Message", Toast.LENGTH_LONG).show();
    }
});
Run Code Online (Sandbox Code Playgroud)

您需要确保从UI线程调用"initMe".您可能正在从onCreate启动SurfaceView,它由UI线程调用,所以你会很好(我假设这是一个自定义的SufaceView扩展类?)