Как мне поставить много фрагментов в ViewPager и избежать плохого кода? - PullRequest
2 голосов
/ 30 августа 2011

У меня 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 ]

6 голосов
/ 30 августа 2011

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

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

List<Fragment> fragments;

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

public void addFragment(Fragment f) {
  fragments.add(f);
}
1 голос
/ 21 июля 2012

Используйте FragmentStatePagerAdapter вместо FragmentPagerAdapter.

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

0 голосов
/ 30 августа 2011

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

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

...