如何关闭自定义android.support.v7.app.AlertDialog.Builder?

时间:2017-01-04 05:47:52

标签: android xml alertdialog

我创建了一个自定义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是自定义类的对象,此对象在作为主片段一部分的函数中初始化。

3 个答案:

答案 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只会在用户取消对话时调用,然后被解雇,无需手动解除/取消。