0

次のスニペットを使用してダイアログアクティビティを作成しました。このアクティビティでは半透明のテーマを使用しているので、きれいに見えます。

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" />
4

5 に答える 5

1

ダイアログ(DialogActivity)を作成し、そこからアラートビルダーで別のダイアログを開きます。したがって、2つのダイアログが表示され、戻るをクリックするとアラートダイアログは削除されますが、DialogActivityは削除されません。なぜDialogActivityが必要なのですか?呼び出しアクティビティからアラートを開いてみませんか?

于 2012-10-14T08:09:16.397 に答える
1

EventBusを使用して、別のアクティビティからのDialogActivityイベントをリッスンできます。または、聞くためにインターフェースを実装することができます。

EventBus(GreenRobot)の例:

https://github.com/greenrobot/EventBus

https://greenrobot.github.io/EventBus/

http://code.tutsplus.com/tutorials/quick-tip-how-to-use-the-eventbus-library--cms-22694

于 2015-10-27T13:11:30.287 に答える
0

onCreate()でダイアログを呼び出すと、ダイアログはフォアグラウンドになります。

したがって、onKeyDownメソッドでダイアログonBackPressedを終了してみてください。

于 2012-10-14T06:40:18.537 に答える
0

使ってみてください

public void onBackPressed() {
    if(alertDialog!=null) 
    alertDialog.dismiss();
    DialogActivity.this.finish();
    super.onBackPressed();
}
于 2012-10-14T06:56:12.360 に答える
0

これを変える

android:launchMode="singleInstance"

android:launchMode="singleTask" また android:launchMode="singleTop"

于 2015-10-27T12:41:03.393 に答える