Entfernen Sie alle Fragmente aus ViewPager, die mit FragmentStatePagerAdapter gefüllt sind

7

Ich habe einen ViewPager, den ich mit Fragmenten (die Objekte von arrayListOfObjects darstellen) mit FragmentStatePagerAdapter füllen. Alles funktioniert gut:

%Vor%

Der Fragmentadapter erweitert FragmentStatePagerAdapter.

Von der Hauptaktivität aus starte ich eine dialogbezogene Aktivität; Hier kann der Benutzer einen neuen bevorzugten Ort hinzufügen, indem er ein neues Objekt erstellt, das die Arraylist der Objekte ändert, die von der primären Aktivität übergeben wurden. Dies ist der Code zum Starten der Dialogaktivität. Alles funktioniert gut:

%Vor%

Die unverankerte Aktivität fügt Objekte zu arrayListOfObjects hinzu.

In der onActivityResult der primären Aktivität habe ich die arraListOfObjects, die ich erhalte, mit der von mir gesendeten verglichen. Wenn es anders ist, möchte ich den Inhalt des ViewPagers vollständig entfernen und ihn mit dem neuen ArrayListOfObjects neu erstellen. Dies ist das onActivityResults:

%Vor%

Dies ist der FragmentStateAdapter-Code:

%Vor%

}

Problem: Aber das neue ArrayListOfObjects wird neben dem alten hinzugefügt, bevor ich die startActivityFor-Ergebnisse ausgelöst habe.

Wie zwinge ich den viewPager, alte Inhalte zu vergessen? im Grunde zurückgesetzt den ViewPager-Adapter mit diesem newArrayListofObjects mit meinem FragmentStateAdapter?

    
ngwane 15.05.2013, 08:41
quelle

2 Antworten

44

Ich schätze, das Problem besteht darin, dass sich alte Fragmente immer noch in FragmentManager befinden, die Sie für Ihren Adapter verwenden. Wenn dies der Fall ist, müssen Sie nur alle alten Fragmente aus dem Fragmentmanager entfernen.

Im Grunde führen Sie einfach den folgenden Code im Konstruktor Ihres Adapters aus:

%Vor%

Diese Codezeile ist unnötig:

%Vor%

BEARBEITEN: Es mag korrekter sein, Ihre Fragmente mit FragmentTransaction zu entfernen:

%Vor%

Dies wird einige Zeit dauern, bis FragmentTransaction (asynchron) ausgeführt wird.

    
Alex Semeniuk 19.11.2013 10:04
quelle
0

Ich musste lediglich den FragmentStatePagerAdapter neu zuweisen.

Dies wurde bereits in onActivityResult angezeigt, aber was das korrekte Verhalten maskierte, war mein viewPager-Seitenindikator, der die Seiten z. wenn ich 2 Seiten auf dem viewPager hatte und die Child-Funktion aufrufen würde, die ein Objekt auf dem ArrayListOfObjects hinzufügen würde; Der ViewPager-Seitenindikator würde zeigen, dass ich jetzt zwei plus drei Seiten (5) habe.

Ich musste den viewPage-Indikator in onActivityResult zurücksetzen, um ihn durch dieses neue ArrayListOfObjects zu bestimmen, das gerade von der unverankerten Aktivität zurückgegeben wurde.

    
ngwane 16.05.2013 15:11
quelle