为什么setCustomAnimations在嵌套片段中的事务后仍然存在

时间:2013-07-04 02:16:34

标签: android android-fragments android-support-library

这在单词和片段中有点难以解释。所以我准备了一个简单的项目来重现问题。

Download(文件 - >下载)

首次运行时,您会看到Activity A,托管Fragment F,而Fragment F1则会托管其他嵌套片段Fragment F1。当您按片段F按钮时,您会看到Fragment F2过渡到Fragment F2动画(我故意让动画变慢,以便您以后可以看到问题)。< / p>

现在按设备上的后退键,您会看到Fragment F1转换回addToBackStack。 (感谢Fragment F)一切正常,现在按活动A按钮。您会看到Fragment X转换为Fragment X

现在按后退键时要特别注意。您会看到Fragment F按预期转换回Fragment F1。但是,现在似乎是活跃的嵌套片段Fragment F2setCustomAnimations,取决于哪一个可见)也正在转换从之前的setCustomAnimations电话设置的动画!

我认为FragmentTransaction仅对应用的{{1}}有效,而不是对整个片段有效。

1 个答案:

答案 0 :(得分:0)

我不确定这是否是正确的做法。如果有人有更好的想法,请告诉我。

Fragment类有一个名为mNextAnim的字段,用于存储其动画ID。

// If app has requested a specific animation, this is the one to use.
int mNextAnim;

android.support.v4.app.BackStackRecordFragmentTransaction的内部实现类。在事务期间,它将mNextAnim字段设置为适当的动画ID,但之后不会将其清除。

Field na = Fragment.class.getDeclaredField("mNextAnim");
na.setAccessible(true);
na.set(fragF1, 0);