Диалоги / AlertDialogs: как «заблокировать выполнение», когда диалог открыт (в стиле .NET)

Исходя из .NET-среды, я сейчас пытаюсь понять, как работают диалоги в Android.

В .NET при звонкеMessageBox.Show (...)это создает и показывает всплывающее диалоговое окно. В вызове Show я могу указать, какие кнопки должны быть доступны во всплывающем окне, например:

DialogResult myDialogResult = MessageBox.Show("My text here", "My caption here", MessageBoxButtons.YesNoCancel);

Как видите, вызов Show возвращает DialogResult при нажатии кнопки во всплывающем окне, сообщая мне, какая кнопка была нажата. Обратите внимание, что в .NET выполнение останавливается в строке, где вызовШоу(...) сделано, поэтому он может вернуть значение при нажатии кнопки.

Если в приведенном выше примере нажать «Нет», myDialogResult будет равен

myDialogResult == DialogResult.No

Поскольку я считаю, что .NET-способ использования / создания всплывающих окон очень прост и интуитивно понятен, мне бы также хотелось, чтобы такой способ создания всплывающих окон в Android.

Итак, вопрос в том, знает ли кто-нибудь, как «остановить выполнение», как в MessageBox.Show, и затем возвращать значение при каждом нажатии кнопки (и диалог исчезает)?

С уважением

РЕДАКТИРОВАТЬ 1: Чтобы быть немного более понятным:

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

Вот почему я не могу использовать то, что предлагают Эрих и Алекс, так как написание кода в методах onClick, как предлагается ниже, не сработает. Причина в том, что я не могу продолжать «нормальное исполнение». Позвольте мне взять пример:

Позвольте мне взять пример:

int nextStep = 0; // this variable will not be reached from within the onClick-methods

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Hello!")
       .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                nextStep = 1; // *** COMPILER ERROR!! ***
            }
        })
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                nextStep = 2; // *** COMPILER ERROR!! ***
            }
        })
        .create().show();

if (nextStep == 1)
{
    // then do some damage
}
else if (nextStep == 2
    // dont do damage

Если бы я хотел, чтобы выполнение зависело от выбора во всплывающем окне, я бы как-то должен был сделать все переменные в «нормальном исполнении» (в этом случаеследующий шаг) доступно в onClick-методах, и для меня это звучит как ад.

РЕДАКТИРОВАТЬ 2:

Другим очевидным примером будет всплывающее окно с вопросом"Вы хотите продолжить" с вариантами"Да" а также«Нет».

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

С уважением

Ответы на вопрос(12)

Ваш ответ на вопрос