gpt4 book ai didi

android viewpager 适配器和 NullPointerException

转载 作者:行者123 更新时间:2023-11-30 03:52:48 26 4
gpt4 key购买 nike

有时我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com