android viewpager 适配器和 NullPointerException

标签 android nullpointerexception android-viewpager

有时我在 google play 报告中收到 NullPointerExceptions,我在其中(如我所想)使用了 viewpager 或其适配器。这是我的代码:

private PagerAdapter mPagerAdapter;
private ViewPager mPagerView;

private static class PagerAdapter extends FragmentStatePagerAdapter {
    HashMap<Integer, PageFragment> mPageReferenceMap;

    public PagerAdapter(FragmentManager fm) {
        super(fm);
        mPageReferenceMap = new HashMap<Integer, PageFragment>();
    }

    @Override
    public int getCount() {
        return NUM_ITEMS;
    }

    @Override
    public Fragment getItem(int position) {
        PageFragment fragment = PageFragment.newInstance(position);
        mPageReferenceMap.put(position, fragment);
        return fragment;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        super.destroyItem(container, position, object);
        mPageReferenceMap.remove(position);
    }

    public PageFragment getFragment(int key) {
        return mPageReferenceMap.get(key);
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

在 onCreate() 中:

    mPagerAdapter = new PagerAdapter(getSupportFragmentManager());
    mPagerView = (ViewPager) findViewById(R.id.pager);

然后,在这一行,我从一些用户那里得到了崩溃报告:

 mPagerAdapter.getFragment(mPagerView.getCurrentItem()).whatEverFunctionFromFragment();

我在不同的地方(彼此独立)以这种方式调用 fragment - 在对话框的 onDismiss 函数中,在 ListPopupWindow 的 onItemClick 中,等等 - 在 fragment 中有不同的函数。

更多信息:在我完成所有令人难过的事情后,我遇到了这个错误 Heinrisch .当用户恢复 Activity 时出现此错误。但是我仍然不明白如何解决它以及为什么会这样?我应该在 onSaveInstanceState() 中保存 mPageReferenceMap 吗?或者在 onStop() 中?我在 Activity 和 Fragments 的生命周期中缺少什么?

最佳答案

您应该发布重现此错误时获得的堆栈跟踪信息。

只是猜测,但可能是 mPageReferenceMap 在恢复时返回 null。这样做的原因是 FragmentStatePagerAdapter 保留了 fragment 并且仅在需要新 fragment 时才调用 getItem。但是,FragmentStatePagerAdapter 不会保留 mPageReferenceMap 中的信息。因此,如果适配器在不调用 getItem 的情况下恢复 fragment ,您的 fragment 将在那里,但在 mPageReferenceMap 中不会有引用。

关于android viewpager 适配器和 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897294/

相关文章:

android - 水平 ScrollView : Is It Really A Solution?

java - NullPointerException是如何实现的?

java - Class.forName() 不断显示错误 : java. lang.NullPointerException

java - 如何从 MainActivity 将 url 图像添加到 Adapter ViewPager - Android

android - 如何让当前 fragment 显示在 viewpager 的特定选项卡中?

android - 关闭 Activity 时从最近使用的应用程序中删除应用程序

Android部分失效在硬件加速的同时绘制整个 View

android - 从 PagerAdapter 开始新的 Activity

android - 如何显示安装在 Android 设备上的应用商店列表?

java - 调用方法时出现 NullPointerException