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