我正在使用支持包v4的Google API 8(Android 2.2)。
它不会给出任何错误或动画。
交易:
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.content, myFragment);
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.commit();
动画:
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>
有谁知道这里发生了什么?
答案 0 :(得分:239)
在我设置动画之前,管理器正在堆叠我的事务,因此它在没有动画的情况下堆叠事务(悲伤但是真实),即使我在setCustomAnimations()
之后提交事务,也会发生这种情况。
解决方案是首先设置动画:
FragmentTransaction transaction = manager.beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.replace(R.id.content, myFragment);
transaction.commit();
答案 1 :(得分:16)
如上所述,单独的陈述肯定会有效。但在设置交易类型即setCustomAnimation
,add
等之前,此处的技巧是replace
,否则它不会。因此,应用相同的逻辑,method chaining
也有效。例如。
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(R.anim.a_slide_up,
R.anim.a_slide_down,
R.anim.a_slide_up,
R.anim.a_slide_down)
.add(R.id.root_layout,
MyFrag.newInstance())
.addToBackStack("MyFrag")
.commit();
将它放在这里,以便更喜欢method chaining
的人发现它有用。干杯!
答案 2 :(得分:5)
将此留在这里,因为它是最受欢迎的问题。片段事务没有动画,我遇到了同样的问题。罪魁祸首是在包含的布局中将属性android:animateLayoutChanges
设置为true
。
我希望它可以帮助别人节省一些时间寻找解决方案,因为在不同文件中嵌套布局时很难注意到。
答案 3 :(得分:0)
另一个原因可能是不必要地将fragmentTransaction.show()
放在提交之前。这使得弹出转换无法在某些android API版本上显示。
答案 4 :(得分:0)
对我来说问题是使用 Fragment.getChildFragmentManager()
我切换到 Fragment.getParentFragmentManager()
并且动画突然开始工作。