Вложенный AlertDialog в Android — возможно ли это?

Я пытаюсь дважды запросить у пользователя подтверждение, прежде чем сделать что-то необратимое с базой данных. Проблема в том, что внешний обработчик кликов не ждет внутреннего обработчика кликов. После нажатия кнопки «Да» в первом диалоговом окне на короткое время отображается второе диалоговое окно, но внешний обработчик, тем не менее, выполняется и завершается, в конечном итоге уничтожая оба диалоговых окна.

new AlertDialog.Builder(ActivityMain.this).setMessage(
  "Are you sure?").setPositiveButton("Yes",
    new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface arg0, int arg1) {

    new AlertDialog.Builder(ActivityMain.this).setMessage(
      "Are you really sure?").setPositiveButton("Yes",
    new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface arg0, int arg1) {

    ....

Почему это?


person cdonner    schedule 11.12.2010    source источник


Ответы (2)


Просто создайте новый макет xml в качестве диалогового окна, создайте новое действие и установите для него тему @android:style/Theme.Dialog в файле манифеста под тегом действия, например:

<activity android:theme="@android:style/Theme.Dialog" android:name="LocationDialog"> </activity>

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

new AlertDialog.Builder(ActivityMain.this).setMessage(
  "Are you sure?").setPositiveButton("Yes",
    new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface arg0, int arg1) {
             Intent i = new Intent(YourActivity.this, NewActivity.class);
             startActivity(i);
      }

Это запустит вашу новую активность в виде диалогового окна, в котором вы сможете легко применить свое действие.

person Ahmed Daoud    schedule 16.01.2011

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

person John    schedule 09.12.2012