当用户离开片段时,我会显示动画。为此我使用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();
}
}
是否有方法/解决方法可以在旋转后保持动画“弹出”片段?
答案 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);
}
}
我试过了,它运行正常。