Исходя из .NET-среды, я сейчас пытаюсь понять, как работают диалоги в Android.
В .NET при вызове MessageBox.Show(...)
, который создает и показывает всплывающее диалоговое окно. В вызове Show я могу указать, какие кнопки должны быть доступны во всплывающем окне, например:
DialogResult myDialogResult = MessageBox.Show("My text here", "My caption here", MessageBoxButtons.YesNoCancel);
Как видите, вызов Show возвращает DialogResult при нажатии кнопки во всплывающем окне, сообщая мне, какая кнопка была нажата. Обратите внимание, что в .NET выполнение останавливается в строке, где выполняется вызов Show(...)
, поэтому он может возвращать значение при нажатии кнопки.
Если в приведенном выше примере нажать «Нет», 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
Если бы я хотел, чтобы выполнение зависело от выбора во всплывающем окне, я бы как-то должен был сделать все переменные в «нормальном исполнении» (в данном случае nextStep
) доступными в методах onClick, и это звучит как ад для меня.
Редактировать 2
Другим очевидным примером будет всплывающее окно с вопросом «Хотите продолжить» с параметрами «Да» и «Нет» .
Если пользователь нажимает «Да», весь метод должен быть прерван, в противном случае он должен продолжить выполнение. Как вы решаете это красиво?