我有FragmentPagerAdapter
我覆盖其setPrimaryItem()
:
@Override
public void setPrimaryItem(ViewGroup container, int position,
Object object) {
super.setPrimaryItem(container, position, object);
...
}
NPE发生在super()
内。以下是支持库中的代码:
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
Fragment fragment = (Fragment)object;
if (fragment != mCurrentPrimaryItem) {
if (mCurrentPrimaryItem != null) {
mCurrentPrimaryItem.setMenuVisibility(false);
mCurrentPrimaryItem.setUserVisibleHint(false);
}
if (fragment != null) {
fragment.setMenuVisibility(true);
fragment.setUserVisibleHint(true);
}
mCurrentPrimaryItem = fragment;
}
}
在发生异常的情况下,fragment
不为空,因此调用方法setUserVisibleHint(true)
。这种方法如下:
public void setUserVisibleHint(boolean isVisibleToUser) {
if (!mUserVisibleHint && isVisibleToUser && mState < STARTED) {
mFragmentManager.performPendingDeferredStart(this);
}
mUserVisibleHint = isVisibleToUser;
mDeferStart = !isVisibleToUser;
}
此代码进入if
但mFragmentManager
为空并且发生NPE。我正在测试的手机上没有发生这种情况,但是我收到了问题的错误报告。我正在使用newInstance()
方法实例化我的片段,我只需调用new Fragment()
并将参数设置为Bundle()
。
我在Fragment
源代码中注意到mFragmentManager
在调用instantiate(FragmentActivity activity, Fragment parent)
之前为空但我不能直接调用此方法,因为我的片段尚未附加活动。
有什么想法吗?