2

我有 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();
        }
    }

 }

但应该有另一种方法来做到这一点。将不胜感激任何帮助。

4

3 回答 3

6

FragmentPagerAdapter足够聪明,不会在每次需要时都实例化片段。所以你的代码是好的。也就是说,保存在内存中的 20 个片段可能有点太多了。看一下FragmentStatePagerAdapter,它会自动保存和恢复片段,而不是一直保存在内存中。

除了使用 a 之外switch,您还可以拥有一个片段列表并从列表中返回:

List<Fragment> fragments;

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

public void addFragment(Fragment f) {
  fragments.add(f);
}
于 2011-08-30T11:57:17.120 回答
1

使用FragmentStatePagerAdapter而不是FragmentPagerAdapter.

FragmentStatePagerAdapterArrayList用于存储片段,但FragmentPagerAdapter正在使用getFragmentByTag.

于 2012-07-21T17:27:52.443 回答
0

老实说,我不认为这有什么问题,你会在很多游戏中看到类似的东西,比如菜单、游戏、暂停、游戏结束等屏幕。

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

于 2011-08-30T11:56:01.203 回答