我正在做一些背景工作,并在执行此操作时显示DialogFragment。一旦完成工作并调用了相关的回调,我便关闭了该对话框。当我这样做时,我在android源代码中遇到了由NPE引起的崩溃:
void dismissInternal(boolean allowStateLoss) {
if (mDialog != null) {
mDialog.dismiss();
mDialog = null;
}
mRemoved = true;
if (mBackStackId >= 0) {
getFragmentManager().popBackStack(mBackStackId,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
mBackStackId = -1;
} else {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.remove(this);
if (allowStateLoss) {
ft.commitAllowingStateLoss();
} else {
ft.commit();
}
}
}
特别是在此行:
FragmentTransaction ft = getFragmentManager().beginTransaction();
最佳答案
如Sogger所说,在调用show()之前调用dismiss()时,也可能会发生这种情况。
在构造Dialog对象之后但不显示对话框之前,如果可以传递(mDialog!= null),则将发生NullPointerException。
当您检查mDialog是否为null时,
if (mDialog != null) {
mDialog.dismiss();
mDialog = null;
}
添加更多类似下面的条件,
if ((mDialog != null) && mDialog.isAdded() && mDialog.isResumed()) {
mDialog.dismiss();
mDialog = null;
}
我认为mDialog.iwego()条件可能就足够了...