Страницы

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

пятница, 13 марта 2020 г.

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

#java #android


Метод 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();
    }
}

    


Ответы

Ответ 1



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

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

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