NullPointerException:尝试从空对象引用上的字段'int android.app.Fragment.mContainerId'读取 [英] NullPointerException: Attempt to read from field 'int android.app.Fragment.mContainerId' on a null object reference
问题描述
仅在Android Lollipop上对片段进行交易时遇到一些有趣的问题。当我回去并删除以前添加的片段时会发生崩溃。
Having some interesting issue with transaction on fragments on Android Lollipop ONLY. Crash happens when i go back and remove previously added fragment.
这是stacktrace:
Here is stacktrace :
FATAL EXCEPTION: main
Process: com.parkme.consumer, PID: 15560
java.lang.NullPointerException: Attempt to read from field 'int android.app.Fragment.mContainerId' on a null object reference
at android.app.BackStackRecord$1.onPreDraw(BackStackRecord.java:1131)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1970)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
我如何进行交易:
getFragmentManager().beginTransaction()
.replace(R.id.list_holder, listFragment)
.commit();
R.id.list_holder
R.id.list_holder
<FrameLayout
android:id="@+id/list_holder"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
我如何删除它:
getFragmentManager().beginTransaction()
.remove(listFragment)
.commit();
我收到了最后一个代码片段的崩溃。
And I`m receiving the crash on last code fragment.
更新
我删除后不再崩溃:
Transition slideTransition = TransitionInflater.from(ParkmeApplication.getContext()).inflateTransition(R.transition.slide_right);
setExitTransition(slideTransition);
slide_right:
slide_right :
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<slide
android:duration="@android:integer/config_shortAnimTime"
android:slideEdge="right"/>
</transitionSet>
推荐答案
该交易不使用 getFragmentManager()
方法并使用 getSupportFragmentManager()
而是从 v4.app.Fragment $扩展c $ c>上课。
我从 android.app.Fragment
搬出后,现在没有崩溃。
The deal was in to do not use getFragmentManager()
method and use getSupportFragmentManager()
instead and extend from v4.app.Fragment
class.
After i have been moved out from android.app.Fragment
it is working now without crashes.
所以,如果您使用 getFragmentManager()
,那么我对所有人的建议,并且您有任何人支持您的应用程序中使用的库,然后转移到支持经理。即便它为你工作。或者你可以像我一样用一些奇怪的bug来击中崩溃。感谢所有有时间给我建议的人!
So my recommendation for all if you have such uses of getFragmentManager()
and you have anyone support libraries used in your app then just move to support manager. Even it`s working for you. Or you can hit the crash with some strange bug as i did. Thanks to all who got time to give me advices !
这篇关于NullPointerException:尝试从空对象引用上的字段'int android.app.Fragment.mContainerId'读取的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!