2014-06-19 15 views
6

In meiner Aktivität habe ich das Fragment mit dem folgenden Code hinzugefügt.Android Fragment Animation wird erneut auf Orientierungsänderung

Fragment wird eingegeben, beenden, mit den Animationen richtig knallen. Aber wenn ich das Gerät anordne, versucht Fragment Manager, das Fragment mit den gleichen Animationen hinzuzufügen. Es scheint sehr seltsam. Ich möchte die Animation nicht, wenn der Benutzer das Gerät ausrichtet.

Ich möchte nicht onConfigChanges='orientation' in Manifest hinzufügen, da ich den Layoutentwurf des Fragments auf Ausrichtung ändern möchte.

Antwort

0

Android fügt bei Änderungen der Ausrichtung automatisch ein vorhandenes Fragment an eine Aktivität an. Sie müssen es also nicht manuell tun. Sie können überprüfen savedInstanceState Variable in onCreate Methode der Aktivität für null und ein Fragment mit Animation nur in dem Fall ersetzen, wenn es null ist:

if (savedInstanceState == null) { 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.setCustomAnimations(R.anim.right_to_left_in, R.anim.right_to_left_exit,R.anim.left_to_right_in,R.anim.left_to_right_exit); 
    DetailsFragment newFragment = DetailsFragment.newInstance(); 
    ft.replace(R.id.details_fragment_container, newFragment, "detailFragment"); 
    ft.commit(); 
} 
+0

Vielen Dank für Ihre Antwort. Meine Aktivität hat diese Logik bereits. Ich habe das Fragment nie wieder hinzugefügt. Wenn der Fragmentmanager versucht, das Fragment erneut an der Ausrichtung anzuhängen, wendet es die Animationen an, die bereits in der Transaktion gespeichert wurden. (Ie, die ich stellte, als Fragment hinzugefügt wurde) –

3

Der einzige Weg, konnte ich vermeiden, dies zu war nicht behalten das Fragment Instanz. In Ihrer DetailsFragment 's onCreate Methode verwenden Sie setRetainInstance(false);

+0

Danke für die Antwort. Ich überprüfe und aktualisiere! –

+0

Kudos! Es funktioniert! Ich überprüfe andere Nebenwirkungen (Ist etwas da !?) beim Setzen von setRetainInstance (false); –

+1

Das Problem ist, dass das Fragment nicht beibehalten wird - lesen Sie hier mehr: http://Stackoverflow.com/a/11318942/667202 – AdamVe

Verwandte Themen