1

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

下载(文件 -> 下载)

在初始运行时,您会看到Activity A托管Fragment F,它又托管了一个额外的嵌套片段Fragment F1。当你按下Fragment F Button时,你会看到Fragment F1过渡到Fragment F2动画(我故意让动画变慢,以便稍后看到问题)。

现在按设备上的返回键,您将看到Fragment F2转换回Fragment F1. (感谢addToBackStack)一切正常,现在按Activity A Button。您将看到Fragment F过渡到Fragment X.

现在按返回键时要特别注意。您将看到按预期Fragment X返回的转换。Fragment F但是,似乎现在活动的嵌套片段(或者Fragment F1Fragment F2,取决于哪个可见)随着上一次调用中设置的动画进行转换setCustomAnimations

我的印象setCustomAnimations是只对应用有效FragmentTransaction,而不是对整个片段有效。

4

1 回答 1

0

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

该类有一个用于存储其动画 IDFragment的字段。mNextAnim

// 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);
于 2013-07-04T04:06:28.960 回答