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()
より呼び出されるということですが、私はnullの参照が残っています。 destroyItem()
を使用して破棄されたフラグメントへの参照をクリアしていない場合...存在しないフラグメントを参照しています。
EventListFragment mFragment = EventListFragment.newInstance(dateOffset);
で作成されたフラグメントを参照する良い方法はありますか?または、私のアクティビティからViewPager内のフラグメントをリフレッシュするにはどうすればよいですか(正確なオプションメニューから)
私は決勝を終え、戻って来て、あなたが仕事をしているかどうかを見てみることにしました。私が助けてくれることを嬉しく思います(それは主要な問題ではない:P)。 –
質問:fragList.remove()コールに、フラグメントではなく弱参照を渡すべきではありませんか? – gcl1
@Michael:私はこのようなアプローチを使い始めました。しかし、fragListには弱い参照が含まれているので、必要な場合でも、エントリはガベージコレクションの対象になるようです。私はgetFragmentByPosition()メソッドがnullを返すことがあることを見てきました。だから私はそれが起こっていると思います。どのようにそれを回避するための任意のアイデアですか?ありがとう。 – gcl1