FragmentPagerAdapter.setPrimaryItem()上的空指针异常

时间:2014-02-21 17:06:23

标签: java android android-fragments

我有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;
}

此代码进入ifmFragmentManager为空并且发生NPE。我正在测试的手机上没有发生这种情况,但是我收到了问题的错误报告。我正在使用newInstance()方法实例化我的片段,我只需调用new Fragment()并将参数设置为Bundle()

我在Fragment源代码中注意到mFragmentManager在调用instantiate(FragmentActivity activity, Fragment parent)之前为空但我不能直接调用此方法,因为我的片段尚未附加活动。

有什么想法吗?

0 个答案:

没有答案