当前位置:  开发笔记 > 编程语言 > 正文

试图从视图中删除片段给我mNextAnim上的NullPointerException

如何解决《试图从视图中删除片段给我mNextAnim上的NullPointerException》经验,为你挑选了3个好方法。

我有3个片段,一个NavigationDrawer,一个MapFragment和一个用户定义的"MapInfoFragment".我希望"MapInfoFragment"在某些事件上在MapFragment顶部显示为半透明,在其他事件上消失.如果我每次都完全删除片段并创建一个新片段,或者我只是更改显示的可见性和信息,我真的不在乎.目前我只是尝试使用FragmentManager的.hide()函数,但我也尝试过.remove和.detach,结果相似.

错误:

03-18 14:28:10.965  24711-24711/com.[packageName].asTest D/AndroidRuntime? Shutting down VM
03-18 14:28:10.965  24711-24711/com.[packageName].asTest E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.[packageName].asTest, PID: 24711
java.lang.NullPointerException: Attempt to write to field 'int android.app.Fragment.mNextAnim' on a null object reference
        at android.app.BackStackRecord.run(BackStackRecord.java:658)
        at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
        at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)

activity_main.xml中:



    
    

        
    

    

    





违规守则:

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.hide(getFragmentManager().findFragmentById(R.id.map_info));
ft.commit();

更新1

我改变map_info_layoutmap_info,我得到的错误没有变化.我之前已经map_info_layout定义为MapInfoFragment布局xml的根FrameLayout的id,所以我认为map_info_layoutmap_info指向同样的事情.

更新2:我的解决方案

事实证明我MapInfoFragment延伸android.support.v4.app.Fragment而不是android.app.Fragment和我使用android.app.FragmentTransaction而不是android.support.v4.app.FragmentTransaction.切换所有内容,android.app.因为我对旧设备兼容性不感兴趣.谢谢Fllo.

更新3:一般解决方案

停止尝试隐藏空对象



1> gak..:

我知道你自己已经解决了这个问题,但我想解释一下这个错误是如何发生的,因为它刚好发生在我身上.

基本上你打电话hide(),remove()等,用一个空值.

错误并不明显,当发生这种情况时,堆栈跟踪不会源自您自己的源,因此实现它的目的并非易事.


指出这一点+ 1.`尝试show()或hide()传递空片段时,尝试在空对象引用上写入字段'int*.mNextAnim'.F.
我不得不使用`getFragmentManager().findFragmentById(R.id.faultyFragment)`而不是`getFragmentManager().findFragmentById(mReferenceToFaultyFragment.getId())`.我在`onCreateView()`中得到了引用

2> Christine..:

当你FragmentManager.popBackstack()在没有后台堆叠片段的情况下打电话时也会发生这种情况.



3> howerknea..:

这是因为您添加或显示或隐藏现在为null的片段,在使用它之前尝试检查它是否为null!

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有