Ich verwende Google API 8 (Android 2.2) mit dem Support Package v4.
Es gibt keine Fehler oder Animationen.
Transaktion:
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.content, myFragment);
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.commit();
Animationen:
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="700"
android:fromXDelta="-100%"
android:toXDelta="0%" >
</translate>
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="700"
android:fromXDelta="0%"
android:toXDelta="100%" >
</translate>
</set>
Weiß jemand, was hier passiert?
Antworten:
Der Manager hat meine Transaktion gestapelt, bevor ich die Animation festgelegt habe, sodass die Transaktion ohne Animationen gestapelt wird (traurig, aber wahr). Dies tritt auch dann auf, wenn ich die Transaktion nach dem festschreibe
setCustomAnimations()
.Die Lösung besteht darin, zuerst die Animationen festzulegen:
quelle
transaction.something().somethingelse().replace().commit()
Viele Android-Methoden kehren zurück,this
so dass Sie vermeiden können, die Variable erneut einzugeben, aber hier tritt irgendwie ein Nebeneffekt auf undsetCustomAnimations()
sollte separat aufgerufen werdentransaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right, R.anim.slide_in_left, R.anim.slide_out_right);
stattdessen zusätzlich, um das Fragment beim Pop vom Backstack zu animieren .Wie oben vorgeschlagen, funktionieren separate Anweisungen definitiv. Der Trick dabei ist jedoch,
setCustomAnimation
vor dem Festlegen des Transaktionstyps nämlich.add
,replace
Es tut etc. sonst nicht. Die gleiche Logik anzuwendenmethod chaining
funktioniert also auch. z.B.Setzen Sie es hier, damit jemand, der es vorzieht
method chaining
, es hilfreich findet. Prost!quelle
Lassen Sie dies hier als die beliebteste Frage. Ich hatte das gleiche Problem mit nicht animierten Fragmenttransaktionen. Schuld daran wurde mit dem
android:animateLayoutChanges
Attributsatztrue
in dem Layout enthalten.Ich hoffe, es hilft jemandem, Zeit bei der Suche nach einer Lösung zu sparen, da es schwer zu bemerken sein kann, wenn Layouts in verschiedenen Dateien verschachtelt sind.
quelle
Ein weiterer Grund kann das unnötige Platzieren
fragmentTransaction.show()
vor dem Festschreiben sein. Dies führt dazu, dass Pop-Übergänge in einigen Android-API-Versionen nicht angezeigt werden.quelle