Fragment Verhalten bei Rotation

ronny130286

ronny130286

Fortgeschrittenes Mitglied
24
Hallo

ich habe eine App geschrieben die aus einer MainActivity besteht, in diese Activity lade ich über das Menü verschiedene Fragments.

Nun tritt das Problem auf sobald ich etwas navigiert bin in der App und den Bildschirm drehe, lande ich immer wieder auf der "Startseite", da auch einige Fragments Eingaben beinhalten möchte ich beim drehen des Displays immer das gerade z.b im Landscape Modus geschriebene auch wieder im Porträmodus angezeigt bekommen.

Wie gehe ich da jetzt ran, da im laufe der Zeit es immer mehr Fragments werden wäre eine statische Variante unschön (falls es nicht anders geht muss es halt statisch sein)

Wäre über Hilfe sehr dankbar.
 
kommt darauf an wie du das alles aufbaust im Code wenn die onCreate methode immer wieder von neuem startet ohne zu berücksichtigen ob die app zum ersten mal startet oder die activity im hintergrund war und jetzt wieder neu startet.

Bei einer Drehung wird die oncreate methode aufgerufen da die oberfläche sich verändert hat ausserdem glaube ich dass der context verloren geht aber bin mri da nciht sicher das hatte ich mal bei einem 3 D Spiel von mir da gingen mir der Context und alle Vertices und einstellungen verloren

Nun kurzum diese Seiete behandlet das alles schön und ausführlich :Handling Runtime Changes | Android Developers
 
Okay danke für die Antworten, ich habe mir das ganze mal angesehen und getestet.

Ich habe jetzt mal folgendes Probiert:

in der MainActivity habe ich in der onCreate Methode folgendes eingefügt:

Code:
if (savedInstanceState == null) {
// Zeige Main Fragment an
}
else {

}

damit erzeugt er mir nur das Main Fragment wenn keine gespeichert Daten vorhanden sind und siehe da => scheint alles zu gehen, er bleibt zumindest immer genau dort wo ich die App gelassen haben, selbst wenn sie im Hintergrund läuft, ebenfalls sind mein Usereingaben auch immer noch vorhanden :)
 
Ich hätte da gleich nochmal eine Frage, wenn ich ein Fragment mittels popBackStack aus dem BackStack entferne und es dann wieder neu mittels replace einfüge,
dann sind meine vorherigen Eingaben immer noch vorhanden, was sie aber eigentlich nicht sollten, nur wieso?

Das Fragment ist für eine DB Eingabe, ich rufe das popBackStack auf wenn ich fertig bin und auf speichern drücke.
 
Zuletzt bearbeitet:
wieso gehst du davon aus dass deine Eingaben nicht mehr vorhanden sein müssten?
wenn du fragmente "poppst":)D) dann bleiben sie immer noch im "created" modus sprich sie durchlaufen nciht nochmal die onCreate methode
 
Jaiel schrieb:
wieso gehst du davon aus dass deine Eingaben nicht mehr vorhanden sein müssten?
wenn du fragmente "poppst":)D) dann bleiben sie immer noch im "created" modus sprich sie durchlaufen nciht nochmal die onCreate methode

Das ist nicht ganz richtig, er durchläuft den onCreate onCreateView und die onActivityCreated erneut, zumindest kann man das sehr gut nachvollziehen wenn man in diese besagten Methoden eine Haltemarke setzt.

Ich denke ich bin aber schon dahinter gekommen wieso das passiert, unzwar gibt es in meiner App eine Activity die dann immer nur Fragments replacet.
Die Activity speichert dann scheinbar auch die States des Fragments (Inhalt der EditText z.B),

ist das Eingabefragment in der View und drehe das Display bleiben meine Daten vorhanden (sollen sie auch), wechsel ich zwischen den Fragment hin und her bleiben die Eingaben auch erhalten (was sie nicht sollen, da ich nach der fertigen Eingabe das nächste mal wieder ein leeres Eingabefragment haben möchte). Bin ich aber auf der Hauptview und drehe dann das Display verschwinden die Eingaben wieder vom Eingabenfragment.
 
Zuletzt bearbeitet:
Code:
android:configChanges="keyboardHidden|orientation|screenSize"
Verhindert die Neuerstellung des Fragments. Diese Lösung ist aber etwas umstritten.

Ansonsten..
Code:
    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
    }


    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
    }
 

Ähnliche Themen

D
Antworten
17
Aufrufe
408
datNeMo
D
M
Antworten
3
Aufrufe
167
moin
M
Zurück
Oben Unten