Fragment mit Animation zu Activity hinzufügen

  • Hi,
    ich habe eine Activity und füge per Button ein Fragment hinzu.
    Dieses Fragment soll nun mit einer Animation erscheinen. Ich habe inzwischen mehrere Ansätze ausprobiert, leider hat keiner funktioniert.
    Hauptsächlich habe ich versucht, die Animation in der FragmentTransaction via setCustomAnimation hinzuzufügen.
    Fehler habe ich bei keinem Versuch erhalten, Animationen aber auch nicht.


    Hier kommt mein Code, ich hoffe, jemand von euch weiß, woran es liegt.


    Viele Grüße,
    Nolyn


  • Hi jogimuc,


    das Layout wird geladen und angezeigt, da gibt es keine Probleme. :thumbup:


    Das Erstellen der Instanz habe ich aus der offiziellen Doku (siehe: "Adding a fragment to an activity").


    Java: adding a Fragment (official)
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    
    
    ExampleFragment fragment = new ExampleFragment();
    fragmentTransaction.add(R.id.fragment_container, fragment);
    fragmentTransaction.commit();

    Dort wird die support library Variante genutzt. Auch das habe ich schon probiert, es gab für mich keinen sichtbaren Unterschied.
    Deine Variante mit instantiate habe ich noch nicht zum Laufen bekommen, das probiere ich weiter. :P


    In dem stackoverflow post geht es wieder darum, ein angezeigtes Fragment durch ein zweites zu ersetzen und dafür eine Animation zu benutzen.
    Das scheint auch der häufigste use-case zu sein, dazu habe ich auch diverse posts gefunden.
    Dazu gehört auch, dass anscheinend meistens eine Activity nur ein container ist und die angezeigten Views Fragmente.


    Bei mir hat die Activity selbst aber ein layout, das zuerst angezeigt wird und bei Klick des Buttons durch das Fragment ersetzt werden soll.
    Ich dachte also, es geht eventuell um Activity animations und las folgende Artikel, aber leider half keiner, da entweder nur eine Activity animiert wurde, oder nur Fragmente.
    Medium: Material Transitions
    androiddesignpatterns: Activity & Fragment Transitions
    developer.android.com: reveal or hide a view using animation


    Ich werde als nächstes eine zweite Activity hinzufügen, die dann ein oder mehrere Fragmente als Layout hat und schauen, ob dann die Animationen funktionieren. 8)

  • Hi ,


    ja mit setCustomAnimations ist nur eine Animation von Fragmenten möglich.


    Wie sieht dein Layout der Activity aus?


    Normaler weise ist das so , im Layout der Activity hast du einen Platzhalter Container für die Fragmente und in diesen Layout Bereich werden die Fragmente eingebendet. Wie groß dieser ist, ist dir überlassen. Wenn du willst das es den gesamten Bildschirm ein nimmt dann ist im Main Layout eigentlich nur ein Container. Für den anfangs Bildschirm erstellst du dann auch ein Fragment und Klasse und machst alles was du sonst in deine Activity Kasse machst in der Fragment Klasse.


    Das erste laden eines Fragment ist mit add ein austauschen wird mitreplace gemacht. Für den User sieht es so aus als ob ein erneue Aktivity geladen wurde . Eigentlich wurde nur ein Fragment geladen die Activity läuft weiter. Ein Fragment läuft immer in einer Activity aleine kann ein Fragment nicht laufen. Der gesamte Code für das Fragment muss nun in der Fragment Klasse gemacht werden.
    hier mein Layout der main Activity


    Aufruf des ersten Fragment in der Main Activity

    Java
    Fragment fragStartseite = (FragStartseite) Fragment.instantiate(this, FragStartseite.class.getName(), null);
    getFragmentManager().beginTransaction().add((int) R.id.fragContainer, this.fragStartseite).commit();

    Klasse FragStartseite



    Bemerken Möchte ich noch das du bei Fragmenten nicht das XML Atriput onKlick mehr benutzen kannst.
    Und in der Fragment Klasse den Contex auf die Activity brauchst.

  • Danke für dein Feedback, das werde ich auf jeden Fall ausprobieren. :thumbup:


    Meine Layouts sehen folgendermaßen aus:



    Ich habe keinen Platzhalter für Fragmente. Welche Vorteile hat es denn, diesen Platzhalter zu definieren?


    Eine Activity kann eine andere Activity mit einer Animation starten und ein Fragment kann ein anderes Fragment mit einer Animation ablösen.
    Die erste Activity, die gestartet wird (wegen mir die "MainActivity"), kann nicht mit einer Animation gestartet werden, egal ob sie ein Fragment oder keines als Haupt-Layout definiert, korrekt?


    Und falls die MainActivity kein Fragment anzeigt und dann irgendwann eines dynamisch hinzugefügt wird, kann dieses Fragment auch nicht mit einer Animation angezeigt werden, korrekt?

  • alles richtig was du schreibst.
    Ein Fragment läuft immer in einem Container dies kann auch ein layout sein.
    Wobei ein unter layout besser ist und nicht das gesamte Main layout somit tauschst du das gesamte layout der Aktivität aus.
    Activity mit einer Animation , ist was anderes, du Startest keine activity das würdest du auch mit intent machen.
    Ein Fragment läuft immer innerhalb einer activity und einen dafür im layout vorgeshenen Platz ob der nun statisch im XML oder dynamischen Java erstellt wird ist gleich. Nur wenn du das gesamte Main layout nimmst hat die activity kein Layout mehr.


    Die erste Activity, die gestartet wird (wegen mir die "MainActivity"), kann nicht mit einer Animation gestartet werden, egal ob sie ein Fragment oder keines als Haupt-Layout definiert, korrekt?
    Rrichtig die Activity nicht zumindestens nicht mit diesen mitteln




    >Die erste Activity, die gestartet wird (wegen mir die "MainActivity"), kann nicht mit einer Animation gestartet werden, egal ob sie ein Fragment oder keines als Haupt-Layout definiert, korrekt?


    Richtig die Activity nicht zu mindestens nicht mit diesen Mitteln.
    Wenn das Fragment in einem Platzhalter Läuft der den ganzen Bildschirm ein nimmt wie bei mir müsste das auch gehen. Wie gesagt ist dann der gesamte Code im Fragment und nicht in der Activity.



    >Und falls die MainActivity kein Fragment anzeigt und dann irgendwann eines dynamisch hinzugefügt wird, kann dieses Fragment auch nicht mit einer Animation angezeigt werden, korrekt?

    Stimmt so nicht sollte auch dynamisch gehen. Aber wie gesagt nimmt man für ein Fragment ein leerers Layout.

  • Ok, danke für dein Feedback. :)


    Was ich jetzt mitnehme ist Folgendes: Es ist guter Style, die Activity als Container zu nutzen und das UI in Fragmenten darzustellen. Das eröffnet auch mehr Möglichkeiten, z.B. für Animationen. Dafür sind Platzhalter für Fragmente im Layout der Activity hilfreich.


    Was ich noch nachlesen muss ist, was für eine Aufgabe der Activity in der Architektur der App dann zukommt.
    Spontan hätte ich gedacht, dass die Logik in der Activity stattfindet und die UI-Represäntation im Fragment...aber da bin ich mir nicht sicher. :P

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!