ViewPager in TabFragment lädt kein zweites Mal

Lesezeit: 3 Minuten

Benutzer-Avatar
Daan Olislager

Ich versuche, eine App zu machen, die eine hat ViewPager in einem Fragment, das Teil von a ist TabHost. Alles klappt gut. Ich habe meine Tabbar, ich kann Tabs wechseln. Wenn ich auf den Reiter mit der ViewPageralles wird richtig angezeigt.

Sobald ich jedoch diesen Reiter mit der ViewPager und diese Registerkarte zurückgeben, mein Inhalt wird nicht angezeigt. Wenn ich zweimal zur Seite scrolle, sehe ich mein nächstes Bild und wenn ich zweimal zurück gehe, sehe ich auch, dass die Bilder geladen werden (wahrscheinlich die offscreenloaded).

Seht das meine TabFragment wird reinstanziiert, wenn ich darauf zurückkomme, aber die Fragmente in der ViewPager sind nicht.

@Override
public void onActivityCreated(Bundle savedInstanceState) {

    mProjectText = (TextView) getView().findViewById(R.id.projectText);
    mProjectText.setText(mActiveProject.getInspirationText());

    mAdapter = new AlbumAdapter(getFragmentManager(), mActiveProject.getInspiration());

    mPager = (ViewPager)getView().findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);

    super.onActivityCreated(savedInstanceState);
}

public class AlbumAdapter extends FragmentStatePagerAdapter {

private ArrayList<ProjectContent> mItems;

public AlbumAdapter(FragmentManager fm, ArrayList<ProjectContent> items) {
    super(fm);
    this.mItems = items;
}

@Override
public Fragment getItem(int position) {
    return AlbumContentFragment.newInstance(mItems.get(position));
}

@Override
public int getCount() {
    return mItems.size();
}

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}}

Das Modell für die App

Ich habe das Problem gefunden. Es hat zwei Tage gedauert, aber hey, es ist behoben.

Anstatt zu verwenden

mAdapter = new AlbumAdapter(getFragmentManager(), mActiveProject.getInspiration());

Du solltest benutzen

mAdapter = new AlbumAdapter(getChildFragmentManager(), mActiveProject.getInspiration());

Soviel zu 5 Zeichen.

  • Mann, du weißt nie, wie du mir heute Nacht den Arsch gerettet hast!

    – Anika

    21. Oktober 2014 um 15:46 Uhr

  • Übrigens suchen Sie nicht nach etwas wie getSupportChildFragmentManager(), da getChildFragmentManager() eine Methode von Fragment und nicht von Activity ist …

    – DominicM

    5. Februar 2015 um 21:34 Uhr

  • Perfekt, Kumpel, ohne deinen Beitrag hätte ich das nie gefunden.

    – Seltsam

    20. Februar 2017 um 13:45 Uhr

  • Es funktioniert, aber wenn wir das Fragment das zweite Mal öffnen, dauert es 1 Sekunde Verzögerung, um die Listenansicht des ersten Tabs anzuzeigen. Irgendeine Lösungsmöglichkeit?

    – Ritzor

    6. Juli 2017 um 8:12 Uhr

  • Vielen Dank! Das liegt daran, dass wir ein Fragment in einem Fragment hinzufügen, richtig? Aber wenn es in einer Aktivität ist, sollte es so sein getFragmentManager()? Das hat meinen Tagesmenschen wirklich bedankt

    – Ralf

    10. Dezember 2018 um 5:53 Uhr

Benutzer-Avatar
Rajesh v

Ich habe lange gesucht und endlich eine Lösung gefunden. Ändern Sie Ihre Seitenadapterinstanz FragmentPagerAdapter zu FragmentStatePagerAdapter
Beispiel:

class PageAdapter extends FragmentStatePagerAdapter {

  • Als Sie, nach FragmentPagerAdapter zu FragmentStatePagerAdapter funktioniert es. Es ist eine einfache und kurze Antwort.

    – Ravikumar11

    2. April 2016 um 17:14 Uhr

  • Vielen Dank. Verbrachte zu viel Zeit mit diesem Problem und Ihre einfache Änderung funktionierte.

    – Ryan Fiorini

    23. Juli 2016 um 13:25 Uhr

  • OMG, es löst mein Problem, aber ich habe ein Problem mit der dynamischen Höhe von Fragment in ViewPager gefunden, mein void OnMeasure kann beim zweiten Mal keine Sichthöhe erhalten.

    – RaymondLe

    19. Mai 2017 um 7:55 Uhr

  • Die richtige Antwort ist die andere, aber das funktioniert auch. Danke euch allen.

    – emmgfx

    8. Februar 2018 um 11:18 Uhr

  • Dies funktioniert zwar, ändert jedoch, wie die Fragmente geladen und im Speicher gehalten werden. Wenn Sie das Verhalten eines FragmentPagerAdapters wünschen, ist die andere Lösung die richtige.

    – DerSeegler

    1. November 2018 um 16:34 Uhr

Benutzer-Avatar
Akhtar

du solltest benutzen getChildFragmentManager() Anstatt von getFragmentManager() und FragmentStatePagerAdapter() Anstatt von FragmentPagerAdapter().Hoffe, es wird für jemanden nützlich sein.

  • Hey, können Sie bitte erklären, warum Sie verwenden FragmentStatePagerAdapter Über FragmentPagerAdapter funktioniert?

    – Bilal Naim

    15. Juli 2019 um 9:24 Uhr

1130380cookie-checkViewPager in TabFragment lädt kein zweites Mal

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy