Android FragmentStatePagerAdapter 質問する

Android FragmentStatePagerAdapter 質問する

私はFragmentStatePagerAdapterを使っていますこの例

MyAdapter クラスは次のように実装されます。

public static class MyAdapter extends FragmentStatePagerAdapter {
        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return NUM_ITEMS;
        }

        @Override
        public Fragment getItem(int position) {
            return ArrayListFragment.newInstance(position);
        }
    }

ListFragment クラスには、新しいインスタンスを作成するための次のメソッドが含まれています。

    /**
     * Create a new instance of CountingFragment, providing "num"
     * as an argument.
     */
    static ArrayListFragment newInstance(int num) {
        ArrayListFragment f = new ArrayListFragment();

        // Supply num input as an argument.
        Bundle args = new Bundle();
        args.putInt("num", num);
        f.setArguments(args);

        return f;
    }

アクティビティに新しいフラグメント ステート ページャー アダプターを作成すると、getItemが呼び出され、次にnewInstanceListFragment クラスのメソッドが呼び出されます。これは、新しいフラグメントを作成する場合に最適です。

getItemしかし、フラグメントオブジェクトを取得するためにどのように変更すればよいのか(必要な場合)は私には分かりません。すでに存在する場合ユーザーは、たとえばページ 2 からページ 1 に移動します。アクティビティで、以前に作成した既存のフラグメントを取得して、AsyncMethodフラグメント クラス内にある内部クラスを実行できるようにしたいと思います。

ベストアンサー1

解決策は提供された回答よりもはるかに簡単だと思います。

見てみるとの源FragmentStatePagerAdapter.instantiateItem()instantiateItem()では、 がこのロジックを処理するため、 の実装ではgetItem()常に新しいインスタンスが返されることがわかります。

したがって、既存のフラグメントを返すには、次のようにするだけです ( から呼び出していると仮定しますViewPager)。

Fragment f = (Fragment) getAdapter().instantiateItem(this, getCurrentItem());

おすすめ記事