当尝试将新的dialogFragment添加到片段上现有的dialogFragment时,对null对象引用的Fragm



这不是一个重复的问题,因为问题的发生情况不同。。因为我只是在尝试做我提到的事情时才经历这种行为(布局顺序(

我正试图通过另一个对话框片段创建一个新的对话框片段。当我尝试这样做时,它会抛出一个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"); 

最新更新