Android вложен AlertDialog - възможно ли е това?

Опитвам се да помоля потребителя за потвърждение два пъти, преди да направя нещо необратимо с базата данни. Проблемът е, че външният манипулатор на кликвания не чака вътрешния манипулатор на кликвания. След като се щракне върху бутона Да в първия диалогов прозорец, вторият диалогов прозорец се показва за кратко, но въпреки това външният манипулатор се изпълнява и завършва, като в крайна сметка унищожава и двата диалогови прозореца.

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