Android片段动画在方向更改时再次重复

8

在我的活动中,我使用以下代码添加了片段。

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.right_to_left_in, R.anim.right_to_left_exit,R.anim.left_to_right_in,R.anim.left_to_right_exit);
DetailsFragment newFragment = DetailsFragment.newInstance();
ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");
ft.commit();

Fragment正在正确地输入、退出和弹出动画。但是当我旋转设备时,FragmentManager会尝试使用相同的动画添加fragment。这似乎很奇怪。我不想在用户旋转设备时出现动画。

我不想在清单中添加onConfigChanges='orientation',因为我想在方向变化时更改fragment的布局设计。

2个回答

3

唯一的方法是避免保留碎片实例。在您的DetailsFragmentonCreate方法中使用setRetainInstance(false);


太棒了!它正在运行!我在设置setRetainInstance(false)时会检查其他副作用(有什么吗?)! - Ponsuyambu
1
问题在于该片段不会被保留 - 在此处阅读更多信息:https://dev59.com/pGgu5IYBdhLWcg3wpYcj#11318942 - AdamVe
请查看此处 - http://adblogcat.com/fragment-transition-animations-while-hiding-the-previous-fragment/ - AdamVe

0

在屏幕方向改变的情况下,Android会自动重新附加现有的片段到活动中。因此,您不必手动执行此操作。您可以在活动的onCreate方法中检查savedInstanceState变量是否为null,并仅在其为null时使用动画替换片段:

if (savedInstanceState == null) {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.setCustomAnimations(R.anim.right_to_left_in, R.anim.right_to_left_exit,R.anim.left_to_right_in,R.anim.left_to_right_exit);
    DetailsFragment newFragment = DetailsFragment.newInstance();
    ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");
    ft.commit();
}

谢谢你的回答。我的活动已经有了这个逻辑。我从未再次添加片段。当片段管理器尝试在方向上重新附加片段时,它会应用已存储在事务中的动画效果。(即我在添加片段时设置的动画效果) - Ponsuyambu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接