2014-07-16 130 views
0

getItem(),我每次创建片段?我是否正确使用FragmentPagerAdapter?

以及使用FragmentPagerAdapter生成fragmentActivity的好例子是什么?

我是问问题fooly非常抱歉......

public class SectionsPagerAdapter extends FragmentPagerAdapter 
    { 

     public SectionsPagerAdapter(FragmentManager fm) 
     { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) 
     { 
      // getItem is called to instantiate the fragment for the given page. 
      // Return a DummySectionFragment (defined as a static inner class 
      // below) with the page number as its lone argument. 


      Fragment fragment = new DummySectionFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); 
      fragment.setArguments(args); 

      switch(position) 
      { 
      case 0: 
       Fragment fragment_tab1 = new MainActivity_Fragment_Tab_02(getApplicationContext()); 
       fragment_tab1.setRetainInstance(true); 

       return fragment_tab1; 
      case 1: 
       Fragment fragment_tab2 = new MainActivity_Fragment_Tab_01(getApplicationContext()); 
       fragment_tab2.setRetainInstance(true); 
       return fragment_tab2; 
      case 2: 
       Fragment fragment_tab3 = new MainActivity_Fragment_Tab_03(getApplicationContext()); 
       fragment_tab3.setRetainInstance(true); 
       return fragment_tab3; 

      } 
      return fragment; 
     } 

     @Override 
     public int getCount() { 
      // Show 3 total pages. 
      return 3; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      Locale l = Locale.getDefault(); 
      switch (position) { 
      case 0: 
       return getString(R.string.title_section1).toUpperCase(l); 
      case 1: 
       return getString(R.string.title_section2).toUpperCase(l); 
      case 2: 
       return getString(R.string.title_section3).toUpperCase(l); 
      } 
      return null; 
     } 
    } 

回答

1

这似乎好,是因为预期它不工作? getItem()将从viewpager调用一次,然后它会将片段保存在内存中,因此不必多次调用它。

有一件事我会改变是将:

 Fragment fragment = new DummySectionFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); 
     fragment.setArguments(args); 

 default: 

最后在开关的情况下,使代码更高效。

想了解更多,这里有一个很好的例子:http://developer.android.com/training/implementing-navigation/lateral.html

+0

Thx for zezeq !! – HoJunLee

+0

Np!如果您对答案感到满意,请注意并/或将其标记为已接受的答案 – Zezeq

1

如果你有一个静态计数,你知道,它不会改变,比如在你的活动选项卡,你应该使用FragmentStatePagerAdapter而不是FragmentPagerAdapter

FragmentStatePagerAdapter将在片段查看时将片段保存在内存中,视图层次结构可能在需要时被销毁。

FragmentPagerAdapter用于动态内容,每次滑动并获取另一个片段时,片段将被销毁,但状态将被存储。