私は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
が呼び出され、次にnewInstance
ListFragment クラスのメソッドが呼び出されます。これは、新しいフラグメントを作成する場合に最適です。
getItem
しかし、フラグメントオブジェクトを取得するためにどのように変更すればよいのか(必要な場合)は私には分かりません。すでに存在する場合ユーザーは、たとえばページ 2 からページ 1 に移動します。アクティビティで、以前に作成した既存のフラグメントを取得して、AsyncMethod
フラグメント クラス内にある内部クラスを実行できるようにしたいと思います。
ベストアンサー1
解決策は提供された回答よりもはるかに簡単だと思います。
見てみるとの源FragmentStatePagerAdapter.instantiateItem()
instantiateItem()
では、 がこのロジックを処理するため、 の実装ではgetItem()
常に新しいインスタンスが返されることがわかります。
したがって、既存のフラグメントを返すには、次のようにするだけです ( から呼び出していると仮定しますViewPager
)。
Fragment f = (Fragment) getAdapter().instantiateItem(this, getCurrentItem());