java - 空指针异常 : Attempt to read from field 'int android.app.Fragment.mContainerId' on a null object reference

标签 java android android-fragments android-fragmentactivity

仅在 Android Lollipop 上的 fragment 交易中存在一些有趣的问题。当我返回并删除之前添加的 fragment 时发生崩溃。

这是堆栈跟踪:

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

<FrameLayout
        android:id="@+id/list_holder"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
</FrameLayout>

我如何删除它:

 getFragmentManager().beginTransaction()
            .remove(listFragment)
            .commit();

我收到了最后一个代码 fragment 的崩溃。

更新

在我删除后它不再崩溃了:

Transition slideTransition = TransitionInflater.from(ParkmeApplication.getContext()).inflateTransition(R.transition.slide_right);
setExitTransition(slideTransition);

向右滑动:

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    <slide
        android:duration="@android:integer/config_shortAnimTime"
        android:slideEdge="right"/>
</transitionSet>

最佳答案

协议(protocol)是不使用 getFragmentManager() 方法,而是使用 getSupportFragmentManager() 并从 v4.app.Fragment 扩展类(class)。 在我从 android.app.Fragment 中移出后,它现在可以正常工作而不会崩溃。

因此,如果您对 getFragmentManager() 有这样的使用,并且有人支持您的应用程序中使用的库,那么我建议所有人,然后只需转到支持管理器即可。即使它对你有用。或者你可以像我一样遇到一些奇怪的错误。感谢所有有时间给我建议的人!

关于java - 空指针异常 : Attempt to read from field 'int android.app.Fragment.mContainerId' on a null object reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44303012/

相关文章:

java - 如何在Android中将图像从drawable设置为imageview

android - 如何设置Gridview的Gravity?

Android - Room Repository 和 AsyncTask,如何使用查询从表中取回数据

java - 如何修复android.support.v7.widget.AppCompatButton无法转换为android.view.ViewGroup

android - 您可以将合并标签与 fragment 一起使用吗?

java - Android Studio 声音低于原声带

java - 使用 JPackage 或 Java 如何删除使用预 JPackage 安装程序创建的文件

java - Switch 语句未初始化的变量

android - 将字符串拆分为数组,添加到数组然后转换回字符串

java - 在 fragment 中添加一个按钮?