時々、Google Play レポートで NullPointerExceptions が発生します。(私が思うに) ビューページャーまたはアダプターを使用しています。これは私のコードです:
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();
ダイアログの onDismiss 関数、ListPopupWindow の onItemClick など、さまざまな場所で (互いに独立して) フラグメントをこのように呼び出し、フラグメント内のさまざまな機能を使用します。
詳細情報:悲しいHeinrischをすべて実行した後、このエラーが発生しました。このエラーは、ユーザーがアクティビティを再開したときに表示されます。しかし、私はまだそれを修正する方法を理解していません.なぜそれが起こっているのですか? mPageReferenceMap
onSaveInstanceState() で保存する必要がありますか? またはonStop()で?アクティビティとフラグメントのライフサイクルで何が欠けていますか?