每次滑动都会调用FragmentPagerAdapter getItem()

时间:2014-03-12 12:21:11

标签: android android-fragments android-listfragment

这是我的代码

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中每个位置共有三个TestListFragment实例。 一切正常但是当刷回到0或2时它调用getitem并完成像onCreateView这样的整个东西onActivityCreated是这个预期的行为?

2- As FragmentPAgerAdapter自行完成所有检查,然后为什么它仍在重新实例化片段。我是否需要按照here

提及的方式执行此操作

3-我正在使用ListFragments所有3个listfragment使用不同的适配器哪里是setAdapter的适当位置?我是在onActivityCreated中做的。

4-为什么fm.setRetainInstance(true)不起作用? (我希望将其设为true将不会重新实例化片段)

希望我能清楚地解决问题..

1 个答案:

答案 0 :(得分:2)

您需要了解的第一件事是“Pager Adapters如何工作”:

假设您在寻呼机适配器中有3个项目:

  • 将为第1和第2项调用拳头时间getItem()。
  • 当您向下滑动到第二个 getItem 时,将调用第三个。
  • 当您转到第3个时,getItem将不会调用。
  • 当您回到第二个 getItem 时,将调用第一个项目。

这是适配器模式正在运行。希望它能帮助您找到答案。