旋转屏幕时片段交易动画丢失

时间:2015-02-20 09:03:57

标签: android android-fragments android-animation

当用户离开片段时,我会显示动画。为此我使用setCustomAndimations支持包。
“popEnter”和“popExit”工作正常,但是在活动旋转后它们会丢失 即旋转后弹出片段没有动画。

活动中的片段创建:

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    if (savedInstanceState == null) { // activity started for the first time, no fragment attached yet
        fragment = MyFragment.newInstance(params);
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.setCustomAnimations(0, 0, // enter animations, not important here
        // when popping fragment -> these are lost on rotation
        R.anim.slide_in_right, R.anim.slide_out_right); 
        ft.add(R.id.content, fragment, MY_TAG).addToBackStack(null).commit();
    }
}

是否有方法/解决方法可以在旋转后保持动画“弹出”片段?

1 个答案:

答案 0 :(得分:-1)

我找到了此问题的临时解决方案here(答案#3)

通过添加: 机器人:configChanges = “方向|屏幕尺寸” 清单中的FragmentActivity。

当您在onCreateView中夸大不同的布局时,当然会出现问题,具体取决于屏幕尺寸。所以这也不是最后的答案。

编辑:您可以创建自己的后台堆栈:

公共决赛班MBackStack {

public static Stack<Fragment> fragStack = new Stack<>();

private MBackStack(){}

public static void addFragment(Fragment frag){
    fragStack.push(frag);
}

public static Fragment getFragment(){
    if (fragStack.isEmpty()) {
        return null;
    }

    fragStack.pop();
    Fragment fragment = fragStack.peek();
    return fragment;
}

public static int getStackSize(){
    return fragStack.size();
}

public static void clearStack(){
    while (fragStack.size()!=0){
        fragStack.pop();
    }
}

}

现在而不是

ft.addToBackStack(null);

您可以添加:

YOURFRAGMENT yf = new YOURFRAGMENT();
MBackStack.addFragment(yf);
ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, dts);
ft.commit();

在您的主要活动中,您可以覆盖您的onbackpressed:

    @Override
public void onBackPressed() {

    if(MBackStack.getStackSize()>1){
        ft = getSupportFragmentManager().beginTransaction();
        ft.setCustomAnimations(R.anim.in_left, R.anim.out_right);
        ft.replace(R.id.content_frame, MBackStack.getFragment());
        ft.commit();
    }else{
        finish();
        overridePendingTransition(R.anim.no_animation, R.anim.slide_bottom_out);
    }
}

我试过了,它运行正常。