Как мне поставить много фрагментов в ViewPager и избежать плохого кода?

У меня есть 20 FragmentActivity, все они представляют собой игровые экраны с разной механикой. Я хочу поместить их все в ViewPager. Единственное, что приходит на ум - это фиктивный код:

 public static class MyAdapter extends FragmentPagerAdapter {


    @Override
    public Fragment getItem(int position) {
        switch(position){
          case 0:
            return new Fragment1();
          case 1:
            return new Fragment2();
          .........................
          another 20 case statements here
          .........................
          case 20:
            return new Fragment21();
        }
    }

 }

Но должен быть другой способ сделать это. Буду признателен за любую помощь.

3 ответа

Решение

FragmentPagerAdapter достаточно умен, чтобы не создавать фрагментов каждый раз, когда они нужны. Таким образом, ваш код в порядке. Тем не менее, 20 фрагментов, хранящихся в памяти, могут быть слишком много. Посмотри на FragmentStatePagerAdapter, он будет автоматически сохранять и восстанавливать фрагменты, не сохраняя их постоянно в памяти.

Вместо использования switch Вы можете иметь список фрагментов и вернуться из списка:

List<Fragment> fragments;

public Fragment getItem(int pos) {
  return fragments.get(pos);
}

public void addFragment(Fragment f) {
  fragments.add(f);
}

Использование FragmentStatePagerAdapter вместо FragmentPagerAdapter,

FragmentStatePagerAdapter использует ArrayList хранить фрагменты, но FragmentPagerAdapter использует getFragmentByTag,

Я не думаю, что в этом есть что-то очень плохое, если честно, вы видите это во многих играх, где у вас есть экраны меню, игры, паузы, игры и т.д.

Однако я бы сказал, нужно ли вам создавать "новый" фрагмент каждый раз, когда вы переходите на другую страницу.

Другие вопросы по тегам