0

いくつかのフラグメントで ViewPager を使用しています。次の小さな効果を実現したいと思います。ビューページャーの最初のページにスワイプすると (ページのインデックスが 0 になります)、それを再作成したいと思います。そのため、メモリから引き出されたくないので、そのページにスワイプするたびに再作成したいと思います。instantiateItem メソッドをオーバーライドする必要があると読みましたが、それはできません。

public class PagerAdapter1 extends FragmentPagerAdapter {

    private List<String> fragments;
       private static final String TAG = "FragmentPagerAdapter";
        private static final boolean DEBUG = false;

        private final FragmentManager mFragmentManager;
        private FragmentTransaction mCurTransaction = null;

    /**
     * @param fm
     * @param fragments2
     */
    public PagerAdapter1(FragmentManager fm, List<String> fragments2) {
        super(fm);
        mFragmentManager=fm;
        this.fragments = fragments2;
    }
    /* (non-Javadoc)
     * @see android.support.v4.app.FragmentPagerAdapter#getItem(int)
     */
    @Override
    public Fragment getItem(int position) {
        //return this.fragments.get(position);
        return Fragment.instantiate(ViewPagerActivity.context, fragments.get(position));
    }

    /* (non-Javadoc)
     * @see android.support.v4.view.PagerAdapter#getCount()
     */
    @Override
    public int getCount() {
        return this.fragments.size();
    }



    @Override
    public Object instantiateItem(View container, int position) {
       Log.i("OVERRIDE", "OVERRIDE");

        if (mCurTransaction == null) {
            mCurTransaction = mFragmentManager.beginTransaction();
        }

        // Do we already have this fragment?
        String name = makeFragmentName(container.getId(), position);
        Fragment fragment = mFragmentManager.findFragmentByTag(name);
        if (fragment != null) {
            if (DEBUG) Log.v(TAG, "Attaching item #" + position + ": f=" + fragment);
            mCurTransaction.attach(fragment);
        } else {
            fragment = getItem(position);
            if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
            mCurTransaction.add(container.getId(), fragment,
                    makeFragmentName(container.getId(), position));
        }

        return fragment;
    }
    private static String makeFragmentName(int viewId, int index) {
        return "android:switcher:" + viewId + ":" + index;
    }
} 

OVERRIDE タグが表示されません。だから私の最初の質問は、なぜ私はそれを理解しないのですか? また、以前に書いた効果を得るには、このメソッドをどのように書き直せばよいでしょうか (これが必要な場合)。ページ0でチェックボックスの状態を保存するので必要ですが、ページ1にスワイプしてもページ0が破壊されないため、最適化によってねじれます。そのため、再作成されず、チェックボックスの状態が保存されません(setOffScreenLimit(1)を使用しているため、ページ2にスワイプしない限り)。

4

1 に答える 1

2

mAdapter.notifyDataSetChanged()解決策でした。ただし、これによりすべてのページが削除され、再度インスタンス化して元に戻します。良いニュースはまだ副作用を引き起こしていません。(強制終了、または例外)

于 2013-03-04T15:41:33.070 に答える