我创建了一个自定义android.support.v7.app.AlertDialog.Builder
,而不是使用设置正面和负面按钮,我通过xml设计了一个自定义布局(包含ok和取消按钮),并将其分配给自定义android.support.v7.app.AlertDialog.Builder
。< / p>
我在ok上设置了点击监听器并取消了按钮。我的问题是单击取消按钮我已经设置了一个回调到主片段我要关闭/关闭对话框,但我得到以下异常:
java.lang.IllegalStateException:指定的子级已有父级。您必须先在孩子的父母身上调用removeView()。
如何解决这个问题?
这是我的代码:
cancelbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Listener.OnCancel(); }});
@Override
public void OnCancel() {
final android.support.v7.app.AlertDialog dialog = custompopup.show();
dialog.cancel()}
请注意:取消按钮上的单击侦听器位于Custom类中,OnCancel位于Main片段中,custompopup是自定义类的对象,此对象在作为主片段一部分的函数中初始化。
答案 0 :(得分:2)
只需检查Dialog
是否已打开。如果它是打开的,那么关闭它:
宣布全球:
android.support.v7.app.AlertDialog dialog;
显示对话框:
dialog = custompopup.show();
在你的听众中解除Dialog
,如下所示:
@Override
public void OnCancel() {
if (dialog.isShowing()) {
dialog.dismiss();
}
}
答案 1 :(得分:1)
final android.support.v7.app.AlertDialog dialog = custompopup.show();
在此行之前,您需要关闭之前的对话框。在解除之前的前一个之前,您无法创建新的。
试试这个:
dialog.dismiss();
final android.support.v7.app.AlertDialog dialog = custompopup.show();
onCancel 应如下所示:
@Override
public void OnCancel() {
dialog.cancel()
if(dialog.isShowing(){
dialog.dismiss();
}
android.support.v7.app.AlertDialog dialog = custompopup.show();
}
答案 2 :(得分:1)
您将获得异常,因为您再次显示已显示的同一对话框。
你正在onCancel()
中做这件事。
您不需要取消/取消onCancel中的对话框,它由系统处理。 onCancel只会在用户取消对话时调用,然后被解雇,无需手动解除/取消。