3

ユーザーがメジャーのいくつかの値を入力し、それらをsqliteデータベースに保存する activity(ImportActivity) があります。

ユーザーがデータベースへのインポート後に保存ボタンをクリックすると、警告ダイアログ (SAVEORBACK_DIALOG_ID) が表示され、ユーザーはこのアクティビティを終了するか、別のメジャーをインポートできます。完璧に機能します。

私の問題は、(SAVEORBACK_DIALOG_ID) アラート ダイアログの直前に別のアラート ダイアログ (SMS_DIALOG_ID) を表示しようとしたときです。これは、ユーザーに SMS を送信するかどうかを尋ねたいためです。

これを実行すると、2 番目の警告ダイアログ(SAVEORBACK_DIALOG_ID) のみが表示されます!!

インポート アクティビティ これは最終的なダイアログです

私は活動に持っています:

    static final int DATE_DIALOG_ID = 0;
static final int TIME_DIALOG_ID = 1;
static final int SAVEORBACK_DIALOG_ID = 2;
static final int SMS_DIALOG_ID = 3;

私は自分の活動からそれらを呼び出します:

        // sms dialog(send sms to doctor?yes/no)
        showDialog(SMS_DIALOG_ID);

        // save or back dialog
        showDialog(SAVEORBACK_DIALOG_ID);

これが私のダイアログがあるonCreateDialogメソッドです(読みやすくするためにいくつかを削除しました):

    @Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
        return new DatePickerDialog(this, mDateSetListener, mYear, mMonth,
                mDay);
    case TIME_DIALOG_ID:
        return new TimePickerDialog(this, mTimeSetListener, mHour, mMinute,
                false);
    case SAVEORBACK_DIALOG_ID:
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(
                "Information saved successfully ! Add Another Info?")
                .setCancelable(false)
                .setPositiveButton("No",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                ImportActivity.this.finish();

                            }
                        })
                .setNegativeButton("Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                dialog.cancel();
                                // get the new date
                                // Clearing the fields & update date/time
                                // textviews
                            }
                        });
        AlertDialog dialog = builder.create();
        return dialog;

        // case sms dialog
    case SMS_DIALOG_ID:
        AlertDialog.Builder builder2 = new AlertDialog.Builder(this);
        builder2.setMessage("High blood pressure ! Send sms to doctor?")
                .setCancelable(false)
                .setPositiveButton("No",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                dialog.cancel();
                                // do nothing - just continue
                            }
                        })
                .setNegativeButton("Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                dialog.cancel();
                                // try to send sms - report status
                            }
                        });
        AlertDialog dialog2 = builder2.create();
        return dialog2;
        //

    }
    return null;
}
4

1 に答える 1

8

これらのコマンドは連続して実行され、お気づきのとおり、最初のダイアログが上書きされます。

    // sms dialog(send sms to doctor?yes/no)
    showDialog(SMS_DIALOG_ID);

    // save or back dialog
    showDialog(SAVEORBACK_DIALOG_ID);

showDialog()2 番目のダイアログを表示する前に、最初のダイアログからの応答を待機しないためです。

showDialog()最初のダイアログのボタンに 2 番目のコマンドを移動するだけです。

.setPositiveButton("No",
    new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            dialog.cancel();
            // do nothing - just continue
            ImportActivity.this.showDialog(SAVEORBACK_DIALOG_ID);
        }
    })
// etc, etc

または、OnDismissDialogListener を使用することもできます。これは、ダイアログが閉じられるたびに呼び出されます (ボタンのクリック、キャンセル アクションなどによって)。

case SMS_DIALOG_ID:
    ...
    AlertDialog dialog2 = builder2.create();

    dialog2.setOnDismissListener(new OnDismissListener() {
        public void onDismiss(DialogInterface dialog) {
            ImportActivity.this.showDialog(SAVEORBACK_DIALOG_ID);
        }
    });

    return dialog2;
}
于 2012-09-19T19:18:54.240 に答える