使用DialogFragment如果在没有调用过show方法时调用dismiss方法,就会出现异常
java.lang.IllegalStateException: Fragment DialogFragmentName(你自己的类名) not associated with a fragment manager.
提示就是没有FragmentManager
public class DialogFragment extends Fragment{
public void dismiss() {
dismissInternal(false, false);
//可以看到直接调用了dismissInternal方法,这也是DialogFragment中的方法
}
void dismissInternal(boolean allowStateLoss, boolean fromOnDismiss) {
//...
//上面有一部分代码,和我们遇到的异常无关
//下面进入了一个if语句,不管是进入if还是else
//都要调用getParentFragmentManager方法
if (mBackStackId >= 0) {
getParentFragmentManager().popBackStack(mBackStackId,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
//...
} else {
FragmentTransaction ft = getParentFragmentManager().beginTransaction();
//...
}
//...
}
getParentFragmentManager()
是Fragment的方法,会返回Fragment的mFragmentManager对象,当mFragmentManager为null时,就会抛出我们遇到的异常
@NonNull
public final FragmentManager getParentFragmentManager() {
FragmentManager fragmentManager = mFragmentManager;
if (fragmentManager == null) {
throw new IllegalStateException(
"Fragment " + this +