Диалоги / 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:
Другим очевидным примером будет всплывающее окно с вопросом"Вы хотите продолжить" с вариантами"Да" а также«Нет».
Если пользователь нажимает «Да», весь метод должен быть прерван, в противном случае он должен продолжить выполнение. Как вы решаете это красиво?
С уважением