Исходя из .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
) доступными в методах nextStep
, и это звучит для меня как ад,
Редактировать 2
Другим очевидным примером может быть всплывающее окно с вопросом "Хотите продолжить" с опциями "Да" и "Нет".
Если пользователь нажимает "Да", весь метод должен быть прерван, в противном случае он должен продолжить выполнение. Как вы решаете это красиво?