如何实现具有相同片段但具有大量计数的viewpager?

时间:2015-09-11 05:48:35

标签: android android-fragments android-viewpager

这是我的适配器,仅用于测试运行, 现在我想改变getItem(),以便它可以支持大量的项目。 像30(这个数字在不同情况下会发生变化)。 我已准备好imageSet数组。 请帮助。

私有类MyAdapter扩展了FragmentPagerAdapter {

    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = null;
        Bundle bundle = new Bundle();
        switch (position) {

            case 0:
                fragment = new Image();
                bundle.putString("ImageId", imageSet[position]);
                bundle.putString("ImageName","asd");
                fragment.setArguments(bundle);
                break;
            case 1:
                fragment = new Image();
                bundle.putString("ImageId", imageSet[position]);
                bundle.putString("ImageName","asd");
                fragment.setArguments(bundle);
                break;
            case 2:
                fragment = new Image();
                bundle.putString("ImageId", imageSet[position]);
                bundle.putString("ImageName","asd");
                fragment.setArguments(bundle);
                break;
            case 3:
                fragment = new Image();
                bundle.putString("ImageId", imageSet[position]);
                bundle.putString("ImageName","asd");
                fragment.setArguments(bundle);
                break;
        }
        return fragment;
    }

    @Override
    public int getCount() {
        return imageSet.length;
    }
}

1 个答案:

答案 0 :(得分:4)

首先使用FragmentStatePagerAdapter而不是FragementPagerAdapter,因为它将实现更有效的缓存和实例创建策略。

private class MyAdapter extends FragmentStatePagerAdapter{

  public MyAdapter(FragmentManager fm) {
    super(fm);
  }

  @Override
  public Fragment getItem(int position) {
    Fragment fragment = new Image();
    Bundle bundle = new Bundle();
    bundle.putString("ImageId", imageSet[position]);
    bundle.putString("ImageName","asd");
    fragment.setArguments(bundle);
    return fragment;
  }

  @Override
  public int getCount() {
    return imageSet.length;
  }
}