Как мне поставить много фрагментов в 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
,
Я не думаю, что в этом есть что-то очень плохое, если честно, вы видите это во многих играх, где у вас есть экраны меню, игры, паузы, игры и т.д.
Однако я бы сказал, нужно ли вам создавать "новый" фрагмент каждый раз, когда вы переходите на другую страницу.