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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage