Android-如何在完成活动之前显示AlertDialog?

Android-如何在完成活动之前显示AlertDialog?,android,Android,我正在尝试实现这个代码 if(someCondition){ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("message") .setPositiveButton("Yes", this) .setNegativeButton("No", this); builder.show();

我正在尝试实现这个代码

    if(someCondition){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("message")
        .setPositiveButton("Yes", this)
        .setNegativeButton("No", this);
        builder.show();
    }
    finish();
问题在于,该活动在显示对话框之前调用finish(),因此引发以下异常

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

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

然后在按钮的处理程序中,单击“再次完成”。

您将收到以下错误:

MyActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40704090 that was originally added here
因为在活动完成之前,建设者必须被解雇。所以我想你必须重新设计你希望你的活动如何完成。也许您希望在单击“否”按钮时完成它

我希望这有帮助。

当对话框关闭时,使用调用
finish()
。通过这种方式,用户可以响应对话框,活动仍然可以关闭



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

这个代码呢

在你的活动中有些地方

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();
    }

你为什么打电话给finish?此活动的目的是什么?解释此活动的全部目的很复杂,但调用finish()是必需的,我必须在调用finish()之前处理AlertDialog。无论如何,这是一个过渡活动,正在做一些过程,应该在完成后终止。它没有显示布局。您的意思是我应该在条件之后删除finish()并将其写入一个侦听器中吗?如果是这样,如果someCondition==false呢?我从您的示例中假设,无论按下哪个按钮,您都希望调用finish,OnDismissListener将方便地处理这两个按钮。我贴了一个例子,你可以很容易地添加一个条件那里。完美。这正是我需要的。非常感谢:)但这并不能解决我第一次评论的问题。该对话框可能根本不会显示。您的第一条评论似乎可以自行回答,但我明确地将其添加到了示例中。按“是”做一些事情,按“否”做一些其他事情。不管怎样,我都需要完成()然后让这些东西被执行,一旦完成了,然后完成活动。这是可行的,但是Sam的解决方案更适合我的情况。非常感谢:)Sam的代码无法解决someCondition==false的情况。我想我会接受你的回答。谢谢你的努力。
    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();
    }