2

フラグメントへの弱い参照を使用して、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
4

0 に答える 0