Страницы

Поиск по вопросам

суббота, 1 июня 2019 г.

Android - AlertDialog закрывается сам почти сразу после открытия

Метод showResults - показывает AlertDialog, метод endOfGame - закрывает Aktivity. При показе AlertDialog появляется на пол секунды, и потом исчезает, как оставить его на экране?
private void stopGame() { showResults(); endOfGame(); }
private void showResults() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.results); builder.setMessage("Message"); builder.setNegativeButton(R.string.OK, null); builder.create().show(); }
В метод stopGame() приложение попадает из AsyncTask, возможно где-то здесь ошибка?
private class TimerAsyncTask extends AsyncTask{ private int time;
public TimerAsyncTask(int time) { this.time = time; }
@Override protected Void doInBackground(Void... params) { while (time > 0) { SystemClock.sleep(1000); time--; publishProgress(time); } return null; }
@Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); chronometrView.setText(values[0].toString()); }
@Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); stopGame(); } }


Ответ

Присоединюсь к комментарию Abrog Petrovich.
В методе showResults() вы вызываете билдер для создания диалогового окна. Строчка AlertDialog.Builder builder = new AlertDialog.Builder(this); по сути говорит, что билдер будет использовать данное активити (инфлейтить его, использовать стиль и тд), те вы создаете диалоговое окно относительно данного активити.
Но вы в endOfGame(); я так понимаю закрываете это активити, и закрывается диалог - соответственно. В голову приходят срау два способа решения:
1.Действительно, переместите закрытие Activity те ваш метод endOfGame(); в AlertDialog, пусть срабатывает при его закрытии например, ну или сделайте логику Да/Нет. Дайте пользователю принять выбор.
2.Можете создавать Диалоговое окно в новом Acitivity, или открывать новое Actvity в форме диалогового окна, вариантов здесь много, но нужно видеть что происходит в методе endOfGame().

Комментариев нет:

Отправить комментарий