这不是重复的问题,因为问题的发生是不同的..因为我只是在尝试准确执行我提到的内容时才遇到这种行为(布局顺序明智)
我正在尝试通过另一个对话框片段创建一个新的对话框片段。当我尝试这样做时,它会抛出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->片段-> dialogfragment-> dialogfragment(我正在尝试获取它)
我已经尝试过提到答案,并且挑逗是每次更改所发生的错误...
ForgotPswrdSuccessFragment forgotPswrdSuccessFragment = new ForgotPswrdSuccessFragment(); forgotPswrdSuccessFragment.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)调用了另一个dialogfragment。现在,该动作正在引发上述错误
为此
forgotPswrdSuccessFragment.show(this.getChildFragmentManager(), "Password Reset Failed");
例外是
java.lang.IllegalStateException:片段尚未附加。 在android.support.v4.app.Fragment.instantiateChildFragmentManager(Fragment.java:2383)
答案 0 :(得分:2)
@Sha,您好:
YourDialog yourDialog = YourDialog.newInstance();
yourDialog.show(getSupportFragmentManager(),"DialogFragment");
答案 1 :(得分:0)
FragmentManager在连接到活动之前将一直为空。
因此请使用下面的代码
如果它是嵌套的片段,请对片段类使用this.getChildFragmentManager()
否则使用getActivity().getFragmentManager()
或getActivity().getSupportFragmentManager()
。
答案 2 :(得分:0)
getFragmentManager()
可能返回null。如已经提到的堆栈跟踪那样,通过传递空引用可能导致未捕获的异常。最直接的方法是将getFragmentManager()
包装为非空条件
FragmentManager manager = getFragmentManager();
if (manager != null) {
//your code
}
但是,为了避免在代码中出现盲空乘客,请考虑使用getSupportFragmentManager()
。该方法不能直接在片段上调用。因此,您必须分别致电getActivity().getSupportFragmentManager()
或requireActivity().getSupportFragmentManager()
。