我在ViewPager中引用我的片段時遇到問題。我想這樣做是因爲從我的活動中,我想刷新指定位置的片段(例如,當前顯示的片段)。在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中的片段?
我剛剛完成了我的決賽,並決定回來看看你是否有事情工作......很高興我能夠幫助(即使它不是主要問題:P)。 –
問題:不應該將fragList.remove()調用傳遞給弱引用,而不是片段? – gcl1
@Michael:我開始使用這樣的方法,它運作得非常好。但由於fragList包含弱引用,因此似乎這些條目會被垃圾回收處理,儘管您仍然需要它們。我看到getFragmentByPosition()方法有時會返回null,所以我認爲這就是發生了什麼。任何想法如何解決這個問題?謝謝。 – gcl1