我在 ViewPager 中引用我的片段时遇到问题。我想这样做是因为从我的活动中我想刷新指定位置的片段(例如当前显示的片段)。
目前我有这样的事情:
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()
,所以我留下了空引用。如果我不使用destroyItem()
清除对已破坏片段的引用......那么我引用不存在的片段。
有什么好的方法来引用创建的片段EventListFragment mFragment = EventListFragment.newInstance(dateOffset);
吗?或者我应该怎么做才能从我的活动中刷新 ViewPager 中的片段(准确地说是从选项菜单)?