我正在使用 this example 处理 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;
}
当我在我的 Activity 中创建一个新的 fragment 状态寻呼机适配器时,会调用 getItem
,然后调用 ListFragment 类中的 newInstance
方法。当我想创建一个新 fragment 时,这很棒。
但我不清楚如何修改 getItem
(如果甚至需要)以获取 fragment 对象当它已经存在时和用户页面,例如,第 2 页到第 1 页。我希望我的 Activity 检索现有的、先前创建的 fragment ,以便它可以运行位于 fragment 类中的内部类 AsyncMethod
。
最佳答案
我认为解决方案比提供的答案要简单得多。
如果您查看 source of FragmentStatePagerAdapter.instantiateItem()
,您会注意到 instantiateItem()
为您处理此逻辑,因此您的 getItem()
实现应始终返回一个新实例。
因此,为了返回现有的 Fragment,只需执行以下操作(假设您从 ViewPager
调用):
Fragment f = (Fragment) getAdapter().instantiateItem(this, getCurrentItem());
关于Android FragmentStatePagerAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10656323/