Диалог не вызывает слушателя отклонения при нажатии кнопки - PullRequest
0 голосов
/ 12 июня 2018

Я хотел бы отобразить диалоговое окно «ОК» для пользователя, и я хотел бы знать, нажимал ли пользователь «ОК», «Отмена», или он решил просто закрыть диалоговое окно, нажимая в другом месте экрана или нажимая кнопку «Назад».

    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    final EditText input = new EditText(MainActivity.this);
    builder.setView(input);
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener()
    {
        @Override
        public void onClick(DialogInterface dialog, int which)
        {
            // ok stuff
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
    {
        @Override
        public void onClick(DialogInterface dialog, int which)
        {
            // cancel stuff
        }
    });
    builder.setOnDismissListener(new DialogInterface.OnDismissListener()
    {
        @Override
        public void onDismiss(DialogInterface dialog)
        {
            //dismiss stuff
        }
    });
    builder.show();

Проблема здесь в том, что всякий раз, когда пользователь нажимает кнопку «ОК», слушатель «отклонить» срабатывает сразу после этого. Есть ли способ не запускать слушателя, если пользователь нажимает кнопку?

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

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

1 Ответ

0 голосов
/ 12 июня 2018

setOnDismissListener () будет вызываться для по любой причине .Это означает, что если диалог исчезнет с экрана либо из-за нажатия кнопки «ОК», «Отмена», либо касания экрана, либо кнопки «Назад», либо нажатия кнопки «Домой», будет вызвано setOnDismissListener().

Устанавливает обратный вызов, который будетвызывается, когда диалоговое окно закрывается по любой причине.

Если вы заинтересованы в прослушивании всех случаев, когда диалоговое окно закрывается, а не только когда оно отменено, см. setOnDismissListener

Так что обойдите это, что вы упомянули, проверьте с помощью некоторых логических флагов и обработайте это.

...