フラグメントへの弱い参照を使用して、fragmentstatepageradapter でフラグメントを追跡しています。実際のフラグメントを追跡するためにベクターを作成するよりも安価であることがわかりました。したがって、たとえば getFragmentt(2) という関数を呼び出すと、weakreferences のリストでフラグメントが検索され、生きている場合は実際のオブジェクトが返されます。これまでのところすべて順調です。デバイスを回転させると、fragmentManager はフラグメントを再作成しますが、その結果、弱参照はすべて失われます。向きの変更でフラグメントが再作成されている場合でも、アダプターは呼び出されません。これがコードです。
public class SectionsPagerAdapter extends FragmentStatePagerAdapter{
ArrayList<WeakReference<Fragment>> m_fragments;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
m_fragments=new ArrayList<WeakReference<Fragment>>();
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a listFragment ) with the page number as one of its argument.
TweetsListFragment mListfragment = TweetsListFragment.newInstance(
position, nf, mpageTitles[position]);
m_fragments.add(position, new WeakReference<Fragment>(mListfragment));
return mListfragment;
}
@Override
public int getItemPosition(Object object) {
printLog(Consts.TAG, "getting item position from pageview adapter");
return PagerAdapter.POSITION_NONE;
}
@Override
public int getCount() {
return mpageTitles.length;
}
@Override
public CharSequence getPageTitle(int position) {
return mpageTitles[position];
}
/*return actual object from weak store of fragments on request*/
public Fragment getFragment(final int position) {
return m_fragments.get(position) == null ? null :
m_fragments.get(position).get();
}
......... etc