这在单词和片段中有点难以解释。所以我准备了一个简单的项目来重现问题。
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 F2
或setCustomAnimations
,取决于哪一个可见)也正在转换从之前的setCustomAnimations
电话设置的动画!
我认为FragmentTransaction
仅对应用的{{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.BackStackRecord
是FragmentTransaction
的内部实现类。在事务期间,它将mNextAnim
字段设置为适当的动画ID,但之后不会将其清除。
Field na = Fragment.class.getDeclaredField("mNextAnim");
na.setAccessible(true);
na.set(fragF1, 0);