fragmentmanager.begintransaction()位于空对象引用上

webghufk  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(562)

这个问题在这里已经有答案了

什么是nullpointerexception,如何修复它(12个答案)
两年前关门了。
这不是重复的问题,因为问题的出现是不同的。。因为我只是在尝试做我刚才提到的事情时才体验到这种行为(布局顺序)
我试图通过另一个对话片段创建一个新的对话片段。当我试着这么做的时候 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(我正在尝试获取这个)
我试过提到的答案和调侃是错误发生的每一个变化。。。
forgotpswrdsuccesfragment forgotpswrdsuccesfragment=新建forgotpswrdsuccesfragment();forgotpswrdsuccessfragment.show(require().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)

ForgotPasswordDfFragment是一个对话框片段,它在片段上,我在那里调用另一个dialogfragment(ForgotPasswordDfFragment)..现在这个动作抛出了上面提到的eror
为了这个

forgotPswrdSuccessFragment.show(this.getChildFragmentManager(), "Password Reset Failed");

例外是
java.lang.illegalstateexception:尚未附加片段。在android.support.v4.app.fragment.instanceChildFragmentManager(fragment。java:2383)
vdgimpew

vdgimpew1#

fragmentmanager在附加到活动之前将为空。
所以使用下面的代码,
如果是嵌套片段,请使用 this.getChildFragmentManager() 为你的碎片类
其他用途 getActivity().getFragmentManager() 或者 getActivity().getSupportFragmentManager() .

x4shl7ld

x4shl7ld2#

嗨@sha这可能会有帮助:

YourDialog yourDialog = YourDialog.newInstance(); 
yourDialog.show(getSupportFragmentManager(),"DialogFragment");
xbp102n0

xbp102n03#

getFragmentManager() 如果片段未附加到上下文,则可能返回null。这可能会通过传递null引用导致未捕获的异常,正如堆栈跟踪已经提到的那样。最直接的方法是 Package getFragmentManager() 进入非空状态

FragmentManager manager = getFragmentManager();

if (manager != null) {
    //your code
}

但是,为了避免代码中出现盲空乘客,请考虑使用 getSupportFragmentManager() . 此方法不能直接在片段上调用。所以你必须打电话 getActivity().getSupportFragmentManager() 或者 requireActivity().getSupportFragmentManager() 分别。

相关问题