我的应用程序由4个片段组成,作为使用的父片段加载的选项卡FragmentPagerAdapter
.
问题是,当我运行应用程序并按下并重新打开应用程序时,我收到此错误日志:
FATAL EXCEPTION: main java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler()' on a null object reference at android.support.v4.app.FragmentManagerImpl.ensureExecReady(FragmentManager.java:1949) at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1965) at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:620) at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:513) ...
父片段内的代码行是:
viewPager.setAdapter(adapter); tabLayout.setupWithViewPager(viewPager);
并ViewPage
和Adapter
两个不为空!
我必须提到我Fragment
的所有生命周期都在管理中,并且在适配器内部发生了null问题!并且当我使用Activity
as而不是Fragment
!!! 时,同样的适配器工作正常!
经过大量研究,看起来它是一个支持库问题:
带有片段和ViewPager的活动在配置更改时崩溃了
Android支持库问题24.1.0
我也找到了这个答案,但在我的代码中添加一个标志看起来很不寻常:
尝试在空对象上调用虚拟方法'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler()'
我覆盖了finishUpdate
我FragmentPagerAdapter
这样的方法,现在问题解决了!
@Override public void finishUpdate(ViewGroup container) { try{ super.finishUpdate(container); } catch (NullPointerException nullPointerException){ System.out.println("Catch the NullPointerException in FragmentPagerAdapter.finishUpdate"); } }
任何更好的答案?请告诉我...