这是我的代码
public static class TestPagerAdapter extends FragmentPagerAdapter {
Context mContext;
public TestPagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.mContext = context;
}
@Override
public int getCount() {
//it is 3
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
Fragment fm = null;
switch (position) {
case 0 :
case 1 :
case 2 :
fm = TestListFragment.getInstance(mContext, position);
//fm.setRetainInstance(true);
}
return fm;
}
}
TestFragment中实例化的静态方法
public static TestListFragment getInstance(Context context, int position) {
fragmentInstance = new TestListFragment();
fragmentInstance.context = context;
Bundle args = new Bundle();
args.putInt("num", position);
fragmentInstance.setArguments(args);
return fragmentInstance;
}
问题:
1- TestPagerAdapter 中的每个位置总共有 3 个 TestListFragment 实例。 一切正常,但是当滑回第 0 或第 2 时,它会调用 getitem 并完成像 onCreateView 这样的全部操作,它们 onActivityCreated 这是预期的行为吗?
2- 由于 FragmentPAgerAdapter 自行完成所有检查,那么为什么它仍然重新实例化 fragment 。我需要按照提到的那样做吗here
3-我正在使用 ListFragments,所有 3 个 listfragment 使用不同的适配器,setAdapter 的适当位置在哪里?我在 onActivityCreated 中执行此操作。
4-为什么 fm.setRetainInstance(true) 不起作用? (我希望使其为真不会重新实例化该 fragment )
希望我能清楚地说明我的问题..
最佳答案
您需要了解的第一件事是“寻呼机适配器如何工作”:
假设寻呼机适配器中有 3 个项目:
- 第一次为第 1 项和第 2 项调用 getItem()。
- 当您向下滑动到第二个时,将调用第三个的 getItem。
- 当您移动到第三个时,getItem 将不会调用。
- 当您返回到第 2 个时,将调用第一个项目的 getItem。
这是适配器模式正在工作的情况。希望它能帮助您找到答案。
关于android - 每次滑动时都会调用 FragmentPagerAdapter getItem(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22351390/