ViewPager 内で Fragments を参照する際に問題があります。私のアクティビティから、指定された位置(現在表示されているフラグメントなど)でフラグメントを更新したいので、それをやりたいと思います。
現在、私は次のようなものを持っています:
public static class MyPagerAdapter extends FragmentPagerAdapter {
private static final String TAG = "MyPagerAdapter";
private static HashMap<Integer, EventListFragment> mPageReferenceMap = new HashMap<Integer, EventListFragment>();
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
Log.i(TAG, "getItem: "+position);
int dateOffset = position-1;
EventListFragment mFragment = EventListFragment.newInstance(dateOffset);
mPageReferenceMap.put(position, mFragment);
return mFragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
Log.i(TAG, "destroyItem: "+position);
mPageReferenceMap.remove(position);
super.destroyItem(container, position, object);
}
public EventListFragment getFragment(int key) {
Log.i(TAG, "Size of pager references: "+mPageReferenceMap.size());
return mPageReferenceMap.get(key);
}
}
問題は、destroyItem()
が よりも頻繁に呼び出されるgetItem()
ため、null 参照が残っていることです。破棄されたフラグメントへの参照をクリアするために使用destroyItem()
しない場合...まあ、存在しないフラグメントを参照します。
で作成されたフラグメントを参照する良い方法はありますEventListFragment mFragment = EventListFragment.newInstance(dateOffset);
か? または、アクティビティから (正確にはオプション メニューから) ViewPager 内のフラグメントを更新するにはどうすればよいですか?