Ich habe einen Viewpager zu einer Aktivität hinzugefügt, die zwei Seiten enthält.
In onCreate of activity füge ich Fragmente zu einem Fragment hinzuAdapter:
%Vor%Beim ersten Erstellen dieser Aktivität wird das onCreateView -Fragment wie erwartet aufgerufen.
Das seltsame Verhalten ist, wenn der Bildschirm zum ersten Mal gedreht wird, das onCreateView Fragment wird zweimal aufgerufen, aber der zweite Aufruf hat nur die richtige ID und für das erste Rufen Sie id auf 0.
Bei der zweiten Bildschirmdrehung wird onCreateView dreimal aufgerufen, und nur der letzte hat id.
Durch mehr Bildschirmrotation erhöhen sich onCreateView Aufrufe.
Ich habe eine verwandte Frage zur Fragment- und Bildschirmrotation gefunden, aber ich kann nicht verstehen, warum dies passiert und wie man es richtig macht.
----- UPDATE ------
Das ID-Problem wurde gelöst, als ich das Bündel mit der direkten Werteinstellung ersetzte.
Jedes Mal, wenn Sie Ihr Gerät drehen, erstellen Sie ein neues Fragment und fügen es dem FragmentManager hinzu.
Alle zuvor erstellten Fragmente befinden sich immer noch im FragmentManager, daher erhöht sich die Anzahl jedes Mal um eins.
Wenn Sie einen Wert in Ihrem Fragment beibehalten möchten, müssen Sie ihn in den Argumenten speichern, andernfalls gehen alle darin enthaltenen Werte verloren, wenn das System das Fragment neu erstellt.
%Vor% Ich vermute, dass Sie, anstatt ein neues Fragment zu erstellen, Ihre zuvor erstellte Datei wirklich abrufen möchten, wenn Sie das Gerät drehen. Verwenden Sie hierzu getSupportFragmentManager().findFragmentById()
oder getSupportFragmentManager().findFragmentByTag()
.
Bearbeiten: Zusätzlicher Code
%Vor%Versuchen Sie einfach, das Fragment abzurufen, wenn der Wert null ist, erstellen Sie ein neues Fragment und fügen Sie es dem Manager hinzu, andernfalls verwenden Sie das abgerufene.
Wenn Sie Ihr Fragment bei einer Orientierungsänderung nicht neu laden möchten, schreiben Sie Folgendes für die Aktivität, in die Sie das Fragment in die Manifestdatei laden:
%Vor%Tags und Links android android-fragments