次のスニペットを使用してダイアログアクティビティを作成しました。このアクティビティでは半透明のテーマを使用しているので、きれいに見えます。
public class DialogActivity extends Activity {
AlertDialog alertDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("Title");
alertDialog.setMessage("Body");
alertDialog.setIcon(R.drawable.ic_launcher);
aleratDialog.setButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
DialogActivity.this.finish();
}
});
alertDialog.show();
}
@Override
protected void onPause() {
if(alertDialog!=null) {alertDialog.dismiss();}
super.onPause();
}
@Override
protected void onStop() {
if(alertDialog!=null) {alertDialog.dismiss();}
super.onStop();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
finish();
}
return super.onKeyDown(keyCode, event);
}
}
ユーザーが[戻る]ボタンをクリックすると問題が発生します。ユーザーがそれを行うとき、アクティビティは引き続きフォアグラウンドに留まります。onKeyDown
ユーザーが戻ろうとしたときに呼び出すメソッドをオーバーライドfinish()
しようとしましたが、これは役に立ちませんでした。
注:onBackPressedメソッドまたはonKeyDownメソッドは、最初に押し戻したときに呼び出されません。(ActionBarはそのままです)そこに到達するには、もう一度押す必要があります。そうすると、アクティビティが実際に消えます。
これは私のマニフェストエントリと関係があると思います
<activity
android:name=".DialogActivity"
android:launchMode="singleInstance"
android:noHistory="true"
android:label="@string/app_name"
android:configChanges="orientation"
android:theme="@android:style/Theme.Holo.Dialog" />