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 回答