2011-08-30 27 views
2

我有20個FragmentActivity,它們都代表着不同力學的遊戲畫面。 我想把它們全部放在ViewPager中。唯一想到的是這個虛擬代碼:如何向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(); 
     } 
    } 

} 

但應該有另一種方式來做到這一點。將感謝任何幫助。

回答

6

FragmentPagerAdapter足夠聰明,每次需要時都不會實例化片段。所以你的代碼是OK的。也就是說,保存在內存中的20個碎片可能有點太多了。看看FragmentStatePagerAdapter,它會自動保存和恢復片段,而不會一直保留它們的內存。

而不是使用switch你可以有片段的列表,從列表中返回:

List<Fragment> fragments; 

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

public void addFragment(Fragment f) { 
    fragments.add(f); 
} 
+0

該代碼看起來很醜。我試着重新考慮Api演示中用於執行活動的內容,但是我失敗了。 –

+0

哦,如果這是你的擔心,只需將它們添加到列表。查看更新的答案。 –

+0

這看起來像在另一個地方移動代碼的行。我將在主Activity中調用addFragment 20次。如果你說這是多屏幕遊戲的常見做法,我會滿意:) –

0

我不認爲有什麼非常錯誤的說,說實話,你看到很多遊戲中的事情,你喜歡菜單,遊戲,暫停,遊戲結束等屏幕。

我想說的是你每次換到不同的頁面時是否真的需要創建一個新的片段。

+0

據我所知,FragmentPagerAdapter只會創建新的實例,如果我還沒有創建項目。正如你所看到的,所有碎片都是不同的類,所以我需要那20個或者任何開關語句,而且對我來說看起來很醜。 –

+0

我明白了,我還沒有進入碎片,謝謝你的提示。 – C0deAttack

1

使用FragmentStatePagerAdapter而不是FragmentPagerAdapter

FragmentStatePagerAdapter正在使用ArrayList來存儲片段,但FragmentPagerAdapter正在使用getFragmentByTag