Как показать диалоговое окно предупреждения в запущенном потоке?

Я разрабатываю игру для Android. В этой игре есть рельсы, по которым ходят поезда. Это работающая нить. Я хочу показать диалоговое окно предупреждения, когда между ними происходит столкновение. когда я применяю диалоговое окно предупреждения, показывающее, что ошибка не может создать обработчик внутри потока, который не вызвал looper.prepare().


person user1602798    schedule 13.09.2012    source источник


Ответы (6)


Вам нужно создать AlertDialog внутри потока пользовательского интерфейса, иначе он никогда не будет работать. Если вы находитесь в другом потоке, используйте MessageHandler или можете использовать runOnUiThread (используя runnable), чтобы создать свой диалог внутри.

person Daud Arfin    schedule 13.09.2012

Это поможет вам:

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        // Your dialog code.
    }
});
person Ankitkumar Makwana    schedule 13.09.2012
comment
когда я добавляю runOnUiThread в свой код, он показывает ошибку: - Метод runOnUiThread (новый Runnable () {}) не определен для типа MainGamePanel - person user1602798; 13.09.2012

Вы можете использовать обработчики для выполнения этой работы.

Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.post(new Runnable() {
    @Override
    public void run() {
        // Your UI updates here
    }
});
person prakash    schedule 13.09.2012
comment
это должен быть mHandler. Отредактировал. Спасибо...:) - person prakash; 17.09.2012
comment
вам нужно инициализировать переменную Handler mHandler= new Handler(); - person Javier; 23.05.2013

Вы можете создать обработчик в классе Activity и вызвать sendMessage для этого объекта обработчика. Напишите код для отображения предупреждения в методе handleMessage обработчика, например:

Класс активности

Handler mHandler = new Handler()
{
    public void handleMessage(Message msg)
    {
       //Display Alert
    }
};

//Thread

Thread thread= new Thread()
{
    public void run()
    {
         //Logic
         MHandler.sendEmptyMessage(0);
    }
}
person jeet    schedule 13.09.2012

Вы должны показать свой диалог в потоке пользовательского интерфейса, как показано ниже.

runOnUiThread(new Runnable() {
                @Override
                public void run() {
                // Your dialog code.
                }
            });
person Sankar    schedule 13.09.2012

Вы можете попробовать это, с проверкой приложение видно

Activity currentActivity = MainClassApp.getCurrentActivity();
boolean isAppVisible = currentActivity != null;

if (isAppVisible) {
    currentActivity.runOnUiThread(() -> 
    // Your Dialog Code 
}
person Виталий Фадеев    schedule 22.11.2018