Laden von Fragmentdaten nur, wenn in PagerSlidingTabStrip auf die Registerkarte geklickt wird
ich benutzePagerSlidingTabStrip
in meinem Projekt und zeige Daten in Fragmenten. Es ist eine großartige Bibliothek, die großartig funktioniert. Jedes Fragment besteht aus Vorlesungen eines Gelehrten, die von einem Webservice geladen werden. Der Code für den Zugriff auf den Webdienst befindet sich inonCreateView
Methode des Fragments. Derzeit werden alle Daten des Fragments gleichzeitig geladen, wenn sie hinzugefügt werdenViewPager
. Ich habe mich gefragt, ob es eine Möglichkeit gibt, die Daten des Fragments nur dann zu laden, wenn ein Benutzer auf eine bestimmte Registerkarte klickt / wischt. Nicht alles auf einmal.
Aktueller Code ist ziemlich normal, ich habe die Hilfe aus dem mitgelieferten Beispiel [android solution] genommen.1
Der Pager-Adapter lautet wie folgt:
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;
}
}
Es werden ZWEI Fragmente, Informationen und Vorträge zurückgegeben. Lectures Fragment ruft einen Webdienst auf, um die Vorlesungen eines Gelehrten abzurufen.
Aktivitätscode ist:
@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);
}
Ich habe versucht hinzuzufügen_tabs.setOnPageChangeListener(this);
und am Ende mitonPageSelected(int arg0)
auch in meiner Tätigkeit. Ich dachte, es wäre jetzt einfach. Dann habe ich geändertpublic Fragment getItem(int arg0)
imScholarDetailPagerAdapter
oben und zurückgekehrtnull
anstatt zwei Fragmente zurückzugeben. Aber das warf eine Ausnahme auf. Ich dachte, es würde leere Ansichten im Pager rendern .. aber natürlich habe ich mich geirrt.
Um sicherzustellen, dass Fragment Daten lädt, wenn auf die entsprechende Registerkarte geklickt wird und diese angezeigt wird, habe ich auch versucht, die folgenden Ereignisse zu überschreiben, und den Aufruf zum Laden von Daten in diese Ereignisse geschrieben:
onResume()
Nicht funktioniert. Lädt weiterhin Daten, wenn sie zur Aktivität hinzugefügt werden
Versucht, onHiddenChanged außer Kraft zu setzen
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if(!hidden){
loadLectures();
}
}
Das hat auch nicht funktioniert. Es wurden keine Daten geladen, als ob dieses Ereignis überhaupt nicht ausgelöst worden wäre.
Wie mache ich das? Ich möchte einfach ein Fragment laden, wenn der Benutzer auf eine Registerkarte klickt.
Danke im Voraus