AlertDialog продолжает сбой

Я пытаюсь реализовать класс, который использует AlertDialog для отображения диалогового окна подтверждения (например, «Вы уверены, что хотите это сделать?»). Когда я звоню в первый раз, все работает как положено. Но если я попытаюсь вызвать его позже, он вылетит с ошибкой W/InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed.

Я могу создавать отдельные AlertDialogs каждый раз, когда мне нужно использовать окно подтверждения, но это кажется нелогичным. После некоторых поисков (уже 2 дня) я не смог найти рабочего решения. Рассматриваемый класс:

public class ConfirmDialog  {

    private boolean resultValue;
    private boolean result;
    private String title;
    private String message;
    private Context context;

    public ConfirmDialog(Context nContext, String nTitle, String nMessage) {
        context = nContext;
        title = nTitle;
        message = nMessage;
    }

    public boolean getResult()
    {
        final Handler handler = new Handler(new Handler.Callback() {
            @Override
            public boolean handleMessage(@NonNull Message msg) {
                throw new RuntimeException();
            }
        });

        AlertDialog.Builder alert = new AlertDialog.Builder(context);
        alert.setTitle(title);
        alert.setMessage(message);
        alert.setPositiveButton("Yes", new
                DialogInterface.OnClickListener()
                {
                    public void onClick(DialogInterface dialog, int id)
                    {
                        resultValue = true;
                        handler.sendMessage(handler.obtainMessage());
                    }
                });
        alert.setNegativeButton("No", new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {
                resultValue = false;
                handler.sendMessage(handler.obtainMessage());
            }
        });
        alert.show();

        try{ Looper.loop();}

        catch(RuntimeException e){}

        return resultValue;
    }
}

Вызов класса:

ConfirmDialog dialog = new ConfirmDialog(MainMenu.this, "Upload Batch", "Are you sure you want to upload this batch?");
                if (dialog.getResult() == false){
                    return false;
                }
                else {
                    //do something                
                }

Я унаследовал этот проект и не создавал этот класс. Я также не думаю, что мне вообще нужно его использовать, но если я смогу заставить его работать, это немного упростит работу.

Любые идеи?

Спасибо!

вы начинаете другую деятельность или что-то в этом роде?

cobolero 03.04.2021 02:57

Я предположил, что каждый раз, когда вам предлагается диалоговое окно подтверждения, можно считать новое действие.

Patrick Davis 05.04.2021 18:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
43
0

Другие вопросы по теме