我刚刚发现每次在Fragment上设置setRetainInstance(true)时它都按预期工作(片段数据被保留),但这导致片段的自定义动画在屏幕旋转后再次执行.
有没有办法在屏幕旋转时避免/禁用这些动画?
使用以下动画创建片段:
setCustomAnimations(R.anim.slide_in_right,R.anim.slide_out_left,R.anim.slide_in_left,
R.anim.slide_out_right);
所以,我不希望在屏幕旋转时再次执行那些“滑动动画”.
解决方法
这就是我处理它的方式
private boolean viewsHaveBeenDestroyed; @Override public Animation onCreateAnimation(int transit,boolean enter,int nextAnim) { // This stops animation on rotation as we have a retained instance. boolean shouldNotAnimate = enter && viewsHaveBeenDestroyed; viewsHaveBeenDestroyed = false; return shouldNotAnimate ? AnimationUtils.loadAnimation(getActivity(),R.anim.none) : super.onCreateAnimation(transit,enter,nextAnim); } @Override public void onDestroyView() { super.onDestroyView(); viewsHaveBeenDestroyed = true; }
R.anim.none只是一个什么都不做的动画.祝好运.