2014-04-11 9 views
5

Ho appena capito che ogni volta che setRetainInstance (true) su un frammento funziona come previsto (i dati frammento vengono mantenuti), ma ciò causa l'animazione personalizzata del frammento essere eseguito nuovamente dopo la rotazione dello schermo.Come disabilitare/evitare le animazioni personalizzate dopo la rotazione dello schermo

C'è un modo per evitare/disabilitare quelle animazioni sulla rotazione dello schermo?

Il frammento viene creato utilizzando i seguenti animazioni:

setCustomAnimations (R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right);

Quindi, non voglio che quelle "animazioni scorrevoli" vengano eseguite di nuovo sulla rotazione dello schermo.

risposta

10

Ecco come ho gestito lo

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; 
} 

Dove R.anim.none è solo un'animazione che non fa nulla. In bocca al lupo.

+0

cosa specificare in R.anim.none? – Dory

+0

Uso un'animazione alfa XML che va da un alfa di uno a un alfa di uno. – MinceMan