Я разрабатываю игру для Android. В этой игре есть рельсы, по которым ходят поезда. Это работающая нить. Я хочу показать диалоговое окно предупреждения, когда между ними происходит столкновение. когда я применяю диалоговое окно предупреждения, показывающее, что ошибка не может создать обработчик внутри потока, который не вызвал looper.prepare()
.
Как показать диалоговое окно предупреждения в запущенном потоке?
Ответы (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
когда я добавляю 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
это должен быть mHandler. Отредактировал. Спасибо...:)
- person prakash; 17.09.2012
вам нужно инициализировать переменную 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