私のアプリは、ユーザーが保存する名前を入力する AlertDialog を作成します。ユーザーが保存ボタンをクリックすると、 onClickListener が重複した名前をチェックします。名前が既に存在する場合は、別のダイアログ ボックスがポップアップして、既存のデータが置き換えられることをユーザーに警告します。ユーザーは、キャンセルして新しい名前に変更するか、先に進んでデータを置き換えるかを選択できます。
2 番目のダイアログが表示されたとき、最初のダイアログ ボックスは、dismiss を呼び出すまで表示されたままになると思います。ただし、最初の AlertDialog は、2 番目の AlertDialog が表示される前に消えました。つまり、ボタンがクリックされると、却下が自動的に呼び出されます。これはバグですか、それとも仕様ですか?
以下に、Nexus S android 4.0、HTC Rezound android 2.3、および Motorola Droid Bionic android 2.3 の 3 つのデバイスでチェックしたテスト ケースを作成しました。
レイアウト
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/message"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Some message will be here"
/>
<Button
android:id="@+id/show_btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Show"
/>
</LinearLayout>
コード
public class AlertDialogBug extends Activity
{
static final int DIALOG_ALERT_ID = 1;
AlertDialog alertDlg;
TextView message;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
message = (TextView) findViewById(R.id.message);
Button showButton = (Button) findViewById(R.id.show_btn);
showButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
showDialog(DIALOG_ALERT_ID);
}
});
}
private AlertDialog createAlertDialog()
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Bug?");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
// No dismiss, cancel, finish, or removeDialog,
// but the dialog will disappear when this button is clicked.
}
});
alertDlg = builder.create();
alertDlg.setOnDismissListener(new OnDismissListener()
{
@Override
public void onDismiss(DialogInterface dialog)
{
message.setText("onDismiss was called");
}
});
return alertDlg;
}
@Override
protected Dialog onCreateDialog(int id)
{
switch (id)
{
case DIALOG_ALERT_ID:
return createAlertDialog();
default:
return super.onCreateDialog(id);
}
}
}
私は元々、android:theme="@android:style/Theme.Dialog" を使用して、保存ダイアログ ボックスをアクティビティとして作成しました。UI は、Nexus S と Rezound では問題なく見えますが、Droid Bionic ではひどく見えます (編集ボックスとボタンは幅の半分しか占めておらず、残りの半分は空白です)。