使用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 +<

本文探讨了在Android中使用DialogFragment时遇到的 dismiss 闪退异常,即`java.lang.IllegalStateException: Fragment not associated with a fragment manager.`问题。原因在于调用 dismiss 时,DialogFragment 的 mFragmentManager 为 null。解决方案包括确保在调用 dismiss 前已调用 show 方法,或重写 dismiss 方法进行判断。此外,文章还分享了通过逆向追踪代码理解 show 方法如何为 Fragment 分配 mFragmentManager 的过程。
最低0.47元/天 解锁文章
727





