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:
-
onResume()
Pas travaillé. Encore charger des données lors de l'ajout de l'activité -
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
Vous devez vous connecter pour publier un commentaire.
Vous pourriez remplacer
setUserVisibleHint
cas de le fragment de savoir si sa visibles par l'utilisateur et ensuite de charger vos données. quelque chose comme suit:onCreateView
fonction? Je ne suis pas vouloir monMapFragment
pour charger leSupportMapFragment
jusqu'à ce que l'onglet est effectivement cliqué.getContext()
dans cette méthode?