2011-08-30 2 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은 필요할 때마다 조각을 인스턴스화하지 않을 정도로 똑똑합니다. 코드는 괜찮습니다. 즉, 메모리에 보관 된 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

코드의 다른 줄을 다른 곳으로 이동하는 것처럼 보입니다. 주 활동 내에서 addFragment를 20 번 호출 할 것입니다. 많은 스크린이있는 게임의 일반적인 관행이라면 나는 만족할 것입니다. –

0

솔직히 말해서 뭔가 잘못됐다고 생각하지 않습니다. 메뉴, 게임, 일시 중지, 게임 오버 스크린 등과 같은 게임이 많이 있습니다.

내가 말하고자하는 것은 실제로 다른 페이지로 변경할 때마다 '새'단편을 실제로 만들어야하는지 여부입니다.

+0

아시다시피 FragmentPagerAdapter는 I 항목이 아직 생성되지 않은 경우에만 새 인스턴스를 만듭니다. 보시다시피, 모든 단편은 다른 클래스이므로, 20 번 또는 무엇이든 스위치 문과 그 것이 나에게보기 흉한 것을 필요로합니다. –

+0

나는 파편에 아직 가지 않았어, 그 팁 주셔서 감사합니다. – C0deAttack

1

사용 FragmentStatePagerAdapter 대신 FragmentPagerAdapter.

FragmentStatePagerAdapterArrayList을 사용하여 조각을 저장하지만 FragmentPagerAdaptergetFragmentByTag을 사용합니다.