在Orientation Change上再次重复Android Fragment Animation

时间:2014-06-19 14:22:29

标签: android android-fragments

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

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();

片段正在进入,退出,正确弹出动画。但是当我定位设备时,片段管理器正在尝试使用相同的动画添加片段。这看起来很奇怪。当用户定向设备时,我不想要动画。

我不想在清单中添加onConfigChanges='orientation',因为我想在方向上更改片段的布局设计。

2 个答案:

答案 0 :(得分:3)

我唯一能避免这种情况的方法是不保留片段实例。在DetailsFragment' onCreate方法中,使用setRetainInstance(false);

答案 1 :(得分: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();
}