ViewPager wird nicht immer aktualisiert, wenn setAdapter aufgerufen wird, FragmentStatePagerAdapter

7

Zunächst verwende ich FragmentStatePagerAdapter, um einen ViewPager mit Fragmenten zu versehen, die angezeigt werden sollen.

Wenn App im aktiven Zustand ist (d. h. nach onResume() ), wird der Aufruf von setAdapter auf dem ViewPager immer funktionieren und mein ViewPager wird aktualisiert, die Methode getItem(int position) im Adapter wird aufgerufen.

Wenn ich jedoch nach einer Orientierungsänderung in der Methode onCreate(Bundle savedInstance) meiner Aktivität setAdapter aufruft, wird die Methode getItem(int position) nicht aufgerufen, und das alte Fragment wird wiederverwendet.

Ich denke, vielleicht macht der FragmentManager etwas, was ich nicht verstehe? Der Fragment Manager ist das einzige, was während der Orientierungsänderung nicht zerstört wird.

Danke

    
Chao 26.11.2012, 00:31
quelle

3 Antworten

21

Es könnte sein, dass Sie getFragmentManager() verwenden, um den FragmentStatePagerAdapter bei der Verwendung verschachtelter Fragmente zu instanziieren.

Verwenden Sie stattdessen getChildFragmentManager() :

%Vor%

Die Antwort wurde hier gefunden.

    
fahmy 23.01.2014, 16:53
quelle
1

Nun, hier ist die Sache, die ich herausgefunden habe (es ist sehr, sehr merkwürdig).

Wenn Sie Objekte in PagerAdapter aktualisieren müssen, werden Sie es höchstwahrscheinlich nicht schaffen, neue Instanzen von PageAdapter zu erstellen, wenn Sie die gleiche FragmentManager übergeben und an% übergeben. co_de% Aufruf von setAdapter , zB:

%Vor%

oder

%Vor%

Aber wenn Sie ViewPager s ständig wechseln, wenn Sie FragmentManager initialisieren, wird es funktionieren.

Aus meiner Sicht ist es schrecklich ... Wenn jemand Ideen hat, wie man Gegenstände in PagerAdapter richtig auffrischt (und nicht auf diese schmutzige Art), teile deine Gedanken mit anderen:)

    
Toochka 30.03.2015 12:12
quelle
0

Ich benutze das FragmentPagerAdapter und mViewPager.setAdapter () ist nicht arbeiten.Ich behebe es in den folgenden Schritt:
(1) Holen Sie sich die aktuelle Fragmentliste.

%Vor%

(2) Fragment mamuell entfernen

%Vor%

(3) Setzen Sie den neuen FragmentPagerAdapter auf ViewPager

%Vor%

Entfernen Sie einfach die Fragmente, bevor Sie einen neuen Adapter einrichten.

    
wanglugao 28.06.2016 07:17
quelle