NullPointerException:尝试从字段' int android.app.Fragment.mContainerId'中读取在空对象引用上 [英] NullPointerException: Attempt to read from field 'int android.app.Fragment.mContainerId' on a null object reference

查看:68
本文介绍了NullPointerException:尝试从字段' int android.app.Fragment.mContainerId'中读取在空对象引用上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

仅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 类扩展.将我从 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()的此类用法,并且在应用程序中使用了任何支持库,那么我的建议就是随便转到支持经理.甚至为您工作.或者,您也可以像我一样遇到一些奇怪的错误,从而使系统崩溃.感谢所有有时间给我建议的人!

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:尝试从字段&amp;#39; int android.app.Fragment.mContainerId&amp;#39;中读取在空对象引用上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆