Я создаю игру, которая содержит GLSurfaceView
. Этот GLSurfaceView
получает все события касания и на основе этой игры продолжается. Теперь, основываясь на определенных условиях, я хочу показать определенное диалоговое окно. Говорить, что игра заканчивается двойным нажатием, я хочу показать диалоговое окно, в котором говорится, если пользователь хочет перезапустить. Но я думаю, что эти события не обрабатываются в потоке пользовательского интерфейса, поэтому, когда я пытаюсь создать диалоговое окно, мое приложение рушится. Как я могу это достичь?Как показать интерфейс в игре GLSurfaceView на базе Android?
код, который создает этот диалог:
Context ctx = MainActivity.getContext();
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setTitle(ctx.getResources().getString(R.string.ThemeSelectionDialogTitle));
builder.setCancelable(true);
final CharSequence[] items={"Theme 1", "Theme 2"};
builder.setSingleChoiceItems(items,-1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which)
{
if("Theme 1".equals(items[which]))
{
Log.i(LOGUtil.LOG_TAG, "Theme 1 Selected");
}
else if("Theme 2".equals(items[which]))
{
Log.i(LOGUtil.LOG_TAG, "Theme 2 Selected");
}
dialog.dismiss();
}
});
//now that the dialog is set up, it's time to show it
AlertDialog alertDialog = builder.create();
alertDialog.show();
CallStack:
DalvikVM [локальный: 8600] Автор [< 1> Основной] (Приостановлено (исключение WindowManager $ BadTokenException))
ViewRootImpl.deliverInputEvent (ViewRootImpl $ QueuedInputEvent): 5662 ViewRootImpl.doProcessInputEvents(): 5588
ViewRootImpl.enqueueInputEvent (InputEvent, InputEventReceiver, INT, булево) строка: 5559
ViewRootImpl $ WindowInputEventReceiver.onInputEvent (InputEvent) линия: 5737 линия
ViewRootImpl $ WindowInputEventReceiver (InputEventReceiver) .dispatchInputEvent (интермедиат, InputEvent): 185 MessageQueue.nativePollOnce (INT, INT) строка: не доступен [нативный метод] MessageQueue.next() строка: 138
Looper.loop() строка: 123 ActivityThread.main (String []) линия: 5086
метод. invokeNative (Object, Object [], Class, Class [], Class, int, boolean) строка: недоступна [native method] Method.invoke (Object,)Object ...) строка: 515 ZygoteInit $ MethodAndArgsCaller.run) линия (: 785 ZygoteInit.main (String []) строка: 601 NativeStart.main (String []) линия: нет в наличии [нативный метод]
тема [< 10> Binder_2] (Запуск) резьба [< 9> Binder_1] (Запуск) резьбы [< 11> GLThread 4824] (Запуск) резьба [< 12> Binder_3] (Запуск)
Соответствующей Logcat Выход:
D/SomeSDK (3817): Игра-ничья !!! Д/WifiStateMachine (1068): handleMessage: Е = msg.what Д сто пятьдесят одна тысяча пятьсот семьдесят два/WifiStateMachine (1068): processMsg: ConnectedState Д/WifiStateMachine (1068): processMsg: L2ConnectedState Вт/HandlerScheduledExecuto (27831): задача не осуществить UiTask. Рассмотрите возможность использования NamedUiRunnable для Consumers.consumeAsync W/HandlerScheduledExecuto (27831): Задача не реализовать UiTask. Рассмотрите возможность использования NamedUiRunnable для Consumers.consumeAsync W/HandlerScheduledExecuto (27831): Задача не реализовать UiTask. Рассмотрите возможность использования NamedUiRunnable для Eky @ 4210c078 ... ...
D/WifiStateMachine (1068): handleMessage: X W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для eky @ 4210c078 ... ... W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для Consumers.consumeAsync W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для Consumers.consumeAsync W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для eky @ 42103ca8 ... ... W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для Consumers.consumeAsync D/dalvikvm (27831): GC_CONCURRENT освободил 2085K, 39% бесплатно 10594K/17184K, остановился 2ms + 2ms, всего 26ms D/dalvikvm (27831): WAIT_FOR_CONCURRENT_GC заблокирован 18мс D/dalvikvm (27831): WAIT_FOR_CONCURRENT_GC заблокирован 18мс D/dalvikvm (27831): WAIT_FOR_CONCURRENT_GC заблокирован 19ms D/dalvikvm (27831): WAIT_FOR_CONCURRENT_GC заблокирован 19ms W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для Consumers.consumeAsync W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для eky @ 420abc18 W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для eky @ 420a7a80 ... ...
W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для eky @ 4233f958 W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для Consumers.consumeAsync ... ... W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для eky @ 421b6100 W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для eky @ 420abc18 W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для eky @ 420a7a80 W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для eky @ 42099068 W/HandlerScheduledExecuto (27831): Задача не реализует UiTask. Рассмотрите возможность использования NamedUiRunnable для Eky @ 42096ed8 W
Опубликуйте свой логарифм со всем обратным счетчиком стека. Все пользовательские события касания доставляются на вашу нить ui, поэтому происходит что-то еще. –
@LarrySchiefer Добавлен фрагмент кода CallStack и кода. Logcat не дает никакой полезной информации –
Можете ли вы добавить код вокруг того, где вы создаете диалог? Откуда взялся «ctx»? –