如何安全地显示DialogFragment?

时间:2014-10-14 12:39:38

标签: android android-fragments

我在下面的代码中写了按钮点击

显示对话框
@OnClick(R.id.button)
public void buttonClicked(View v) {
  DialogFragment dialog = MyDialogFragment.newInstance();
  dialog.show(getSupportFragmentManager(), TAG);
}

效果很好,但是当我多次单击按钮时,非常快 下面发生异常并崩溃app。

java.lang.IllegalStateException: Fragment already added: MyDialogFragment 

我尝试下面的代码,但发生了相同的异常。

@OnClick(R.id.button)
public void buttonClicked(View v) {
  DialogFragment dialog = 
    (DialogFragment) getSupportFragmentManager().findFragmentByTag(TAG);
  if (dialog != null && dialog.isAdded()) {
    return;
  }
  dialog = MyDialogFragment.newInstance();
  dialog.show(getSupportFragmentManager(), TAG);
}

@OnClick(R.id.button)
public void buttonClicked(View v) {
  DialogFragment dialog = 
    (DialogFragment) getSupportFragmentManager().findFragmentByTag(TAG);
  if (dialog != null && dialog.isAdded()) {
    getSupportFragmentManager().beginTransaction().remove(dialog).commit();
    return;
  }
  dialog = MyDialogFragment.newInstance();
  dialog.show(getSupportFragmentManager(), TAG);
}

我该如何处理此异常?

1 个答案:

答案 0 :(得分:0)

它可能对你有帮助。

填充一个名为lock的布尔值。

private boolean locked;

如果要创建并显示对话框,请检查该字段:

if(!locked) {
    locked = true;
    //create and show fragment
}

当您关闭对话框时,将锁定设置为false。