Java 如何向ViewPager提供许多片段并避免错误代码?
我有20个零碎的活动,它们都像游戏屏幕一样代表着不同的机制。 我想把它们都放在ViewPager中。我唯一想到的是这个伪代码:Java 如何向ViewPager提供许多片段并避免错误代码?,java,android,android-layout,android-compatibility,Java,Android,Android Layout,Android Compatibility,我有20个零碎的活动,它们都像游戏屏幕一样代表着不同的机制。 我想把它们都放在ViewPager中。我唯一想到的是这个伪代码: public static class MyAdapter extends FragmentPagerAdapter { @Override public Fragment getItem(int position) { switch(position){ case 0: return n
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();
}
}
}
但应该有另一种方法来做到这一点。谢谢你的帮助 老实说,我不认为这有什么不对的,你在很多游戏中都可以看到这种情况,比如菜单、游戏、暂停、游戏结束等屏幕
不过我想说的是,每次切换到不同的页面时,您是否真的需要创建一个“新”片段。
FragmentPagerAdapter
足够智能,不会在每次需要时都实例化片段。所以你的代码是好的。也就是说,存储在内存中的20个片段可能有点太多了。看看FragmentStatePagerAdapter,它将自动保存和恢复片段,而不会让它们一直保存在内存中
您不必使用开关
,而是可以拥有片段列表并从列表中返回:
List<Fragment> fragments;
public Fragment getItem(int pos) {
return fragments.get(pos);
}
public void addFragment(Fragment f) {
fragments.add(f);
}
列出片段;
公共片段getItem(int-pos){
返回碎片。获取(pos);
}
公共void addFragment(片段f){
加入(f);
}
使用FragmentStatePagerAdapter
代替FragmentPagerAdapter
FragmentStatePagerAdapter
正在使用ArrayList
存储片段,但是FragmentPagerAdapter
正在使用getFragmentByTag
据我所知,FragmentPagerAdapter将仅在尚未创建I项时创建新实例。正如你们所看到的,所有的片段都是不同的类,所以我需要那个20个或其他的switch语句,那个对我来说很难看,那个代码看起来很难看。我试图重新考虑Api演示中用于午餐活动的内容,但失败了。哦,如果这是您的问题,请将它们添加到列表中。请参阅更新的答案。这看起来像是将代码行移动到另一个位置。我将在主活动中调用addFragment 20次。如果你说这是许多屏幕游戏的常见做法,我会很满意:)如果你必须实例化20个不同的类,你必须在某个地方这样做。如果你有一个类名列表,你可以使用反射并在一个循环中进行,如果这能让你感觉更好的话。关键是,通过本质上使用查找表(列表),可以避免分支(切换)。我不做游戏,顺便说一句:)将名字/页面标题与列表中的每个片段相关联的好方法是什么?