2013-11-18 4 views
0

Я использую FragmentPagerAdapter, который показывает три фрагмента с помощью ViewPager. У меня есть setOffscreenPageLimit до 3, поэтому все три фрагмента отправляют сетевой запрос одновременно, поскольку они видны (я отправляю сетевой запрос на Fragment.onActivityCreated()). Но я хочу, чтобы сетевой запрос был отправлен только тогда, когда отображается фрагмент (это означает, что пользователь прокручивается до этого фрагмента).Отправить запрос сети, как FragmentPagerAdapter показывает фрагмент

Примечание: Я использую setOffscreenPageLimit до 3, потому что каждый раз, когда создается фрагмент нового запроса сети не создан и показать защелки фрагмента

ответ

0

Создания сетевых запросов в oncreateview() каждый фрагмент должен делать то, что вы хотите. Пример: Что-то, что ive использовал. Родительская активность с адаптером фрагмента пейджера.

public class HomeActivity extends SherlockFragmentActivity{ 

     private static final String[] CONTENT = new String[] { "Fragment 1", "Fragment 2" }; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.homexml); 
Bundle extra = getIntent().getExtras(); 
int i = Integer.parseInt(extra.getString("id")); 
     FragmentPagerAdapter adapter = new FragmentAdapter(getSupportFragmentManager()); 

      ViewPager pager = (ViewPager)findViewById(R.id.pager); 
      pager.setAdapter(adapter); 

      TitlePageIndicator indicator = (TitlePageIndicator) findViewById(R.id.indicator); 
      indicator.setViewPager(pager); 
     switch (i) 
     { 

     case 2: 
      pager.setCurrentItem(0); 
     break; 
     case 3: 
      pager.setCurrentItem(1); 
//  break; 
//  case 4: 
//   pager.setCurrentItem(3); 
//  break; 
//  case 5: 
//   pager.setCurrentItem(4); 
//  break; 
//  case 6: 
//   pager.setCurrentItem(5); 
//  break; 
//  case 7: 
//   pager.setCurrentItem(6); 
//  break; 
//   default: 
//    pager.setCurrentItem(0); 
//    break; 
     } 

      indicator.setFooterIndicatorStyle(IndicatorStyle.Underline); 
      indicator.setFooterColor(Color.parseColor("#e7c450")); 


     } 


     class FragmentAdapter extends FragmentPagerAdapter { 
      SherlockFragment frg; 
      public FragmentAdapter(FragmentManager fm) { 
       super(fm); 
      } 

      @Override 
      public SherlockFragment getItem(int position) { 
       switch (position) 
       { 
       case 0: 
      frg = new fragment1(); 
       break; 
       case 1: 
      frg = new fragment2(); 
        break; 
        } 
      return frg; 
      } 

      @Override 
      public CharSequence getPageTitle(int position) { 
       return CONTENT[position]; 
      } 

//   @Override public int getIconResId(int index) { 
//   return ICONS[index]; 
//   } 

      @Override 
      public int getCount() { 
       return CONTENT.length; 
      } 
     } 

Передача Укажите фрагменты в адаптере. делать сетевые запросы в onCreateView() каждого фрагмента. в этом случае сетевые запросы будут выполняться только при видимости фрагмента.

+0

Но 3 запроса создаются для каждого фрагмента одновременно, поскольку viewPager.setAdapter() вызывается, потому что onActivityCreated() называется 3 раза – user1041858

+0

см. Отредактированный ответ. –

Смежные вопросы