У меня проблема с ссылкой на мои фрагменты внутри 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 из моей активности (из меню опций, чтобы быть точным)?