Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何向ViewPager提供许多片段并避免错误代码?_Java_Android_Android Layout_Android Compatibility - Fatal编程技术网

Java 如何向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

我有20个零碎的活动,它们都像游戏屏幕一样代表着不同的机制。 我想把它们都放在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();
        }
    }

 }

但应该有另一种方法来做到这一点。谢谢你的帮助

老实说,我不认为这有什么不对的,你在很多游戏中都可以看到这种情况,比如菜单、游戏、暂停、游戏结束等屏幕


不过我想说的是,每次切换到不同的页面时,您是否真的需要创建一个“新”片段。

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个不同的类,你必须在某个地方这样做。如果你有一个类名列表,你可以使用反射并在一个循环中进行,如果这能让你感觉更好的话。关键是,通过本质上使用查找表(列表),可以避免分支(切换)。我不做游戏,顺便说一句:)将名字/页面标题与列表中的每个片段相关联的好方法是什么?