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

标签 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 中的每个位置总共有 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/

相关文章:

Android 错误 - FragmentTransaction 类型中的方法 replace(int, Fragment) 不适用于参数 (int, ListFragment)

android - 如何使用具有 2 个 png 文件 libGDX 的位图字体?

android - ListView 内存不足 : External allocation too large for this process

java - Android webview chromium 异常 - ContextResult::kFatalFailure: 支持的制服或变量太少

android - 启动谷歌地图 Intent 后返回 Activity

Android:从 ListActivity 迁移到 ListFragment

java - android中如何防止代码重复

android - 如何从资源中将值加载到数组列表中

java - 由于 Fragment 类中没有公共(public)构造函数方法,在 android 中旋转设备后出现异常

android - 使用导航模式隐藏 actionBar 选项卡会对 fragment 后台堆栈产生不利影响