我在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