In meinem Activity
Ich habe ein Layout mit 3 FrameLayout
s, eine oben, eine links und eine in der "Mitte".
Jetzt möchte ich manchmal nur ein oder zwei von ihnen anzeigen. Im Moment mache ich es so:
FrameLayout frame = (FrameLayout) findViewById(R.id.framelayout_menu_left);
frame.setVisibility(...);
frame = (FrameLayout) findViewById(R.id.framelayout_content);
frame.setVisibility(...);
frame = (FrameLayout) findViewById(R.id.framelayout_menu_top);
frame.setVisibility(...);
Allerdings kann dies zu wirklich hässlichen Ergebnissen führen, z.B. wenn ich den "Inhalt" umschalte Fragment
und die obere und/oder linke Seite ausblenden FrameLayout
. Alles beginnt zu flackern, wenn der "Inhalt" Fragment
springt nach oben und/oder links und wird erst danach ersetzt.
Außerdem kann ich natürlich nicht zu einer anderen Einrichtung zurückkehren, gibt es also eine andere Möglichkeit, dies zu tun?
Mit freundlichen Grüßen, Qualle
Bearbeiten:
Vielleicht macht eine kleine Zeichnung meine Frage klarer...
A zeigt ein Layout aus 3 FrameLayouts mit 3 verschiedenen Fragmenten. Jede Farbe steht für ein bestimmtes Fragment.
Jetzt möchte ich von A à D . Ich tue dies, indem ich das blaue Fragment durch das gelbe Fragment über eine FragmentTransaction
.
Dadurch bleiben die anderen Frames jedoch weiterhin sichtbar, weshalb ich sie mit dem obigen Code ausblende.
Jetzt, Frame.setVisibility()
wird weit vor commit() aufgerufen, so dass in B y C das blaue Fragment nach links und oben "springt" und erst danach (in D ) wird durch das gelbe Fragment ersetzt. Dies erzeugt ein unschönes Flackern.
Als Abhilfe blende ich jetzt alle drei FrameLayouts vor der Transaktion aus und blende die benötigten wieder ein, sobald die Transaktion abgeschlossen ist. Aber es gibt immer noch das Problem, dass ich nicht über die Schaltfläche "Zurück" zurückgehen kann, da es sich nicht um eine echte Transaktion handelt.