这不是一个重复的问题,因为问题的发生情况不同。。因为我只是在尝试做我提到的事情时才经历这种行为(布局顺序(
我正试图通过另一个对话框片段创建一个新的对话框片段。当我尝试这样做时,它会抛出一个error
java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentTransaction android.support.v4.app.FragmentManager.beginTransaction()' on a null object reference
at android.support.v4.app.DialogFragment.show(DialogFragment.java:142)
这是相关代码
ForgotPasswordFailedFragment forgotPasswordFailedFragment = new ForgotPasswordFailedFragment();
forgotPasswordFailedFragment.show(getFragmentManager(), "Password Reset Failed");
所以我的视图顺序是这样的。。
mainActivity->fragment->dialogfragment->dialogfragment(我正在尝试获取这个(
我试过提到的答案,并调侃了每次更改时发生的错误。。。
ForgotPswrdSuccessFragment forgotPWrdSuccessFragment=新的ForgotPswrdSuccessFragment((;forgetSwrdSuccessFragment.show(requireActivity((.getSupportFragmentManager((,"密码重置失败"(;
这抛出
Fragment ForgotPasswordDFragment{725811b} not attached to an activity.
at android.support.v4.app.Fragment.requireActivity(Fragment.java:724)
at *********.SignIn.ForgotPassword.ForgotPasswordDFragment.showSuccessDialog(ForgotPasswordDFragment.java:85)
ForgotPasswordDFragment是一个位于片段上的对话框片段我正在调用另一个来自(ForgotPasswordDFragment(的对话片段。。现在这个动作是抛出上面提到的eror
对于这个
forgotPswrdSuccessFragment.show(this.getChildFragmentManager(), "Password Reset Failed");
是个例外
java.lang.IollegalStateException:片段尚未附加。在android.support.v4.app.FFragment.instantiateChildFragmentManager(Fragment.java:2383(
FragmentManager在附加到活动之前将为null。
所以使用下面的代码,
如果是嵌套的Fragment,请将this.getChildFragmentManager()
用于您的片段类
否则使用CCD_ 3或CCD_。
getFragmentManager()
可能返回null。正如堆栈跟踪已经提到的那样,这可能会通过传递null引用而导致未捕获的异常。最直接的方法是将getFragmentManager()
包装成非空条件
FragmentManager manager = getFragmentManager();
if (manager != null) {
//your code
}
但是,为了避免代码中出现盲目的空乘客,请考虑使用getSupportFragmentManager()
。此方法不能在片段上直接调用。因此,您必须分别调用getActivity().getSupportFragmentManager()
或requireActivity().getSupportFragmentManager()
。
Hi@Sha这可能会有所帮助:
YourDialog yourDialog = YourDialog.newInstance();
yourDialog.show(getSupportFragmentManager(),"DialogFragment");