2

我正在尝试实现此代码

    if(someCondition){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("message")
        .setPositiveButton("Yes", this)
        .setNegativeButton("No", this);
        builder.show();
    }
    finish();

问题是活动在显示对话框之前调用完成(),因此它引发以下异常

MyActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40704090 that was originally added here

如何处理?

4

4 回答 4

3
if(someCondition){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("message")
    .setPositiveButton("Yes", this)
    .setNegativeButton("No", this);
    builder.show();
} else {
    finish(); 
}

并在按钮的处理程序中单击再次完成。

于 2012-10-21T17:43:53.890 回答
3

关闭对话框时使用OnDismissListener调用。finish()这样用户可以响应 Dialog 并且 Activity 仍然可以关闭。


if(someCondition) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("message");
        .setPositiveButton("Yes", this)
        .setNegativeButton("No", this);

    AlertDialog dialog = builder.create();
    dialog.setOnDismissListener(new OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialog) {
            finish();
        }
    });
    dialog.show();
}
else {
    finish();
}
于 2012-10-21T17:47:40.460 回答
0

您收到以下错误:

MyActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40704090 that was originally added here

因为在活动完成之前必须解雇建造者。所以我想你将不得不重新设计你希望你的活动如何完成。也许您希望它在单击“否”按钮时完成?

我希望这有帮助。

于 2012-10-21T17:47:16.327 回答
0

我不确定问题到底是什么,但您遇到的错误是因为您在显示对话框时完成了活动。我经常做的是调用我的活动dialog.dismiss()onPauseonStop方法。

这段代码怎么样?:

在你的活动中的一些地方;

private AlertDialog dialog;

onPause 或 onStop 方法,

@Override
public void onPause() {
    super.onPause();
    if(dialog != null){
        dialog.dismiss();
    }
}

建立对话,

    if(someCondition){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("message")
        .setPositiveButton("Yes", new OnClickListener(){
            public void onClick(DialogInterface arg0, int arg1) {
                //do stuff
                 //finish?
            }
        });
        .setNegativeButton("No", new OnClickListener(){
            public void onClick(DialogInterface arg0, int arg1) {
                //do stuff
                //finish?
            }
        });
        dialog = builder.show();
    }
于 2012-10-21T17:57:01.907 回答