2015-12-26 3 views
0

Я показываю фрагменты в viewpager, и каждый фрагмент содержит подключение к данным. Я не хочу ничего делать, пока не будет показан выбранный фрагмент. Как я могу это сделать?Не вызывается перед фрагментом

Я не хочу, чтобы инициировать фрагменты, когда действие вызывает oncreate. (Потому что есть подключение к данным, и я не хочу его) Я просто хочу, чтобы каждый фрагмент был инициализирован, когда выбран фрагмент.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    viewPager = (ViewPager) findViewById(R.id.view_pager); 
    List<Fragment> listFragments = new ArrayList<>(); 
    listFragments.add(new Fg_1()); 
    listFragments.add(new Fg_2()); 
    listFragments.add(new Fg_3()); 
    listFragments.add(new Fg_4()); 
    listFragments.add(new Fg_5()); 
    listFragments.add(new Fg_6()); 
    a_pagerAdapter = new A_PagerAdapter(getSupportFragmentManager(), listFragments); 
    viewPager.setAdapter(a_pagerAdapter); 
    viewPager.addOnPageChangeListener(this); 
} 

ответ

0

Вместо создания всех фрагментов в вашей деятельности OnCreate, ваш ViewPager создавать их при запросе, так что для простого примера:

в вашей реализации A_PagerAdapter, переопределения GetCount() и GetItem (целый), чтобы быть что-то вроде:

public class A_PagerAdapter extends FragmentPagerAdapter { 
... 
    private final static int NUM_PAGES = 6; 
    private final Fragment[] listFragment = new Fragment[NUM_PAGES]; 
... 
    public int getCount() { 
    return NUM_PAGES; 
    } 
... 
    public Fragment getItem(int index) { 
    Fragment itemFragment = null; 
    if (listFragment[index] == null) { 
    // Hard-coded class factory.. yuck. 
    switch(index) { 
     case 0: 
     itemFragment = new Fg_1(); 
     break; 
     case 1: 
     itemFragment = new Fg_2(); 
     break; 
     case 2: 
     itemFragment = new Fg_3(); 
     break; 
     case 3: 
     itemFragment = new Fg_4(); 
     break; 
     case 4: 
     itemFragment = new Fg_5(); 
     break; 
     case 5: 
     itemFragment = new Fg_6(); 
     break; 
    } 
    // Save this instance in case it is asked for again later.. 
    listFragment[index] = itemFragment; 
    } else { 
    // get the fragment we created earlier to avoid re-initializing 
    itemFragment = listFragment[index]; 
    } 
    return itemFragment; 
} 
... 

Это довольно простая/ужасна реализация .. на самом деле это звучит, как вам нужно/ленивую стратегия загрузки кэширования, возможно, срабатывает в onResume фрагментов на вашем взгляде пейджер ..

0
public class SampleFragmentPagerAdapter extends FragmentPagerAdapter implements ViewPager.OnPageChangeListener { 
    final int PAGE_COUNT = 5; 
    private String tabTitles[] = new String[] { "Chats", "Groups", "Contacts","Profile" ,"Settings"}; 
    public SampleFragmentPagerAdapter() { 
     super(getSupportFragmentManager()); 
    } 

    @Override 
    public int getCount() { 
     return PAGE_COUNT; 
    } 


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

    @Override 
    public Fragment getItem(int position) { 

// return PageFragment.create (position + 1); переключатель (позиция) { case 0: ChatScreenActivity chatScreenActivity = new ChatScreenActivity(); return chatScreenActivity; case 1: GroupChatActivity groupChatActivity = new GroupChatActivity(); return groupChatActivity; кейс 2: КонтактыДоступные контактыActivity = new ContactsActivity(); return contactsActivity; кейс 3:

   ProfileActivity profileActivity= new ProfileActivity(); 
       return profileActivity; 
      case 4: 
       SettingActivity settingActivity = new SettingActivity(); 
       return settingActivity; 

      default: 
       return null; 
     } 
    } 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

    } 

    @Override 
    public void onPageSelected(int position) { 

    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 

    }*use this code and do setadapter for your viewpager* 
} 
Смежные вопросы