Comment charger un fragment de données uniquement lorsque l'onglet est cliqué dans PagerSlidingTabStrip

Je suis en utilisant PagerSlidingTabStrip dans mon projet et je suis affichant les données sous forme de fragments. Son une grande bibliothèque qui fonctionne très bien. Chaque Fragment est constitué d'un érudit de conférences qui sont chargés à partir d'un service web. Le code pour accéder au service web est en onCreateView méthode du Fragment. Actuellement, toutes les données du fragment est chargé en même temps lorsqu'ils sont ajoutés à ViewPager. Je me demandais si il n'y a aucun moyen de chargement de données du Fragment uniquement lorsqu'un utilisateur clique sur/de glisse à un onglet spécifique. Pas tout à la fois.

Code actuel est assez standard, j'ai pris de l'aide de l'exemple fourni [android solution].Un

Pager Adaptateur est comme suit:

public class ScholarDetailPagerAdapter extends FragmentPagerAdapter {

    private final String[] TITLES = { "Scholar Info", "Lectures"};
    Scholar _scholar;

    public ScholarDetailPagerAdapter(FragmentManager fm, Scholar scholar) {
        super(fm);
        _scholar = scholar;
    }

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

    @Override
    public Fragment getItem(int arg0) {
        if(arg0 == 0)
            return ScholarsInfoFragment.netInstance(_scholar.Name, _scholar.Information, _scholar.ThumbnailUrl);
        else
            return ScholarLecturesFragment.newInstance(_scholar.ScholarId);
    }

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

}

Il retourne DEUX fragments, des Infos et des Conférences. Conférences fragment appelle un service web pour obtenir un érudit de la des conférences.

Code d'activité est:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //set the Above View
    setContentView(R.layout.tabbed_view);
    Scholar scholar = getScholar(getIntent());      

    _tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
    _pager = (ViewPager) findViewById(R.id.pager);
    _adapter = new ScholarDetailPagerAdapter(getSupportFragmentManager(), scholar);

    _pager.setAdapter(_adapter);

    final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources()
            .getDisplayMetrics());
    _pager.setPageMargin(pageMargin);

    _tabs.setViewPager(_pager);
} 

J'ai essayé d'ajouter _tabs.setOnPageChangeListener(this); et a fini par avoir onPageSelected(int arg0) dans mon activité en tant que bien. J'ai pensé qu'Il serait facile maintenant. Puis j'ai modifié public Fragment getItem(int arg0) dans ScholarDetailPagerAdapter ci-dessus et retourné null au lieu de retourner deux fragments. Mais cela soulève une exception. J'ai pensé qu'Il serait rendu vide vues dans pager .. mais bien sûr j'ai eu tort.

Pour s'assurer Fragment charge des données lors de son onglet est sélectionné et est visible, j'ai aussi essayé surchargeant ses événements suivants et a écrit le chargement des données d'appel à eux:

  1. onResume() Pas travaillé. Encore charger des données lors de l'ajout de l'activité

  2. Essayé primordial onHiddenChanged

    @Override   
    public void onHiddenChanged(boolean hidden) {
    
        super.onHiddenChanged(hidden);
    
        if(!hidden){
            loadLectures();
        }

    }

Cela ne fonctionne pas trop. Pas de données chargé comme si cet événement n'est pas déclenché à tous.

Comment dois-je faire? Je veux simplement charger un fragment lorsque l'utilisateur clique sur un onglet.

Merci d'avance

InformationsquelleAutor Aamir | 2013-12-03