Тост в SurfaceView - PullRequest
       4

Тост в SurfaceView

3 голосов
/ 05 ноября 2011

Я хочу создать сообщение с Toast внутри класса SurfaceView. С этим кодом у меня следующее исключение ...

Toast toast = Toast.makeText(this.getContext(), "Message", Toast.LENGTH_LONG);
        toast.show();

11-05 02: 06: 08.070: ОШИБКА / AndroidRuntime (265): java.lang.RuntimeException: Невозможно создать обработчик внутри потока, который не вызвал Looper.prepare ()

Как я могу сделать тост в SurfaceView ??

Ответы [ 3 ]

5 голосов
/ 05 ноября 2011

Вы должны показать тост с потоком пользовательского интерфейса.Всякий раз, когда вы инициализируете SurfaceView, делайте что-то вроде этого:

Handler handler;
private void initMe()
{
    handler = new Handler();
}

Затем, где бы вы ни захотели сделать тост, сделайте следующее:

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

Вы должны убедиться, что "initMe"вызывается из потока пользовательского интерфейса.Вы вероятно инициируете SurfaceView из onCreate, который вызывается потоком пользовательского интерфейса, так что вам будет хорошо (я предполагаю, что это пользовательский класс расширения SufaceView?)

1 голос
/ 10 декабря 2017

Мне удалось создать Toast внутри класса SurfaceView напрямую, без использования каких-либо обработчиков.

Если вы используете ключевое слово "this" внутри внутреннего класса, но намереваетесь получить объект класса активности (внешний / инкапсулирующий), вам нужно вместо этого использовать его имя класса, например "MainActivity.this". Эту концепцию могут не знать некоторые посредственные Java-разработчики.

Или вы можете создать статический объект Context и назначить ему контекст действия, а затем просто использовать его в любом месте, где вам нужен его контекст.

0 голосов
/ 10 января 2017

Или просто используйте в вашем SurfaceView:

runOnUiThread(new Runnable() {
                public void run() {
                    Toast.makeText(ActivityName.this, "Message", Toast.LENGTH_LONG).show();
                }
            });
...