5

Durante la sostituzione del frammento, sto usando l'animazione di diapositive disponibile per la versione di lecca-lecca di Android. Funziona come previsto per questa particolare sostituzione, ma premendo il pulsante Indietro, si apre per la prima volta il frammento corrente & e si esegue l'inversione dell'introduzione dell'animazione (slide out).android lollipop - setentertransition() per frammenti che non funzionano correttamente all'uscita

private void replaceContentFrameByFragment(Fragment replaceBy, String replaceByFragmentTag) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      Slide slide = new Slide(Gravity.BOTTOM); 
      slide.setDuration(1000); 
      replaceBy.setEnterTransition(slide); 
    } 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.content_frame, replaceBy, replaceByFragmentTag); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commitAllowingStateLoss(); 
} 

Così, come forzare frammento di pop torna solo dopo l'animazione rovescio della slitta è finito? Ho notato che l'attività ha il metodo finishAfterTransition() fornito. C'è qualcosa di simile per frgament?

+0

più informazioni transizioni qui: www.androiddesignpatterns.com/2014/12/activity-fragment-content-transitions-in-depth-part2.html – pskink

+0

Aggiunta transizione ritorno separato anche spettacoli lo stesso comportamento. Slide slide = new Slide (Gravity.BOTTOM); slide.setDuration (1000); replaceBy.setEnterTransition (scivolo); \t \t slide = new Slide (Gravity.BOTTOM); slide.setDuration (1000); replaceBy.setReturnTransition (slide); – Ankur

+0

Puoi pubblicare una schermata del comportamento a cui stai assistendo (è difficile dire esattamente cosa stai descrivendo). Android Studio ha uno strumento di cattura dello schermo che potrebbe essere utile. –

risposta

0

ho avuto lo stesso problema con più o meno lo stesso schema e stato in grado di aggirare l'ostacolo inviando la mia frammenti di transizione:

new Handler().post(new Runnable() { 
    @Override 
    public void run() { 
     page.setEnterTransition(new Slide()); 
     getFragmentManager() 
       .beginTransaction() 
       .replace(R.id.root_layout, page, "current") 
       .commit(); 
    } 
}); 

Non capisco perché questo risolve il problema (o se questo è l'assoluto corretto soluzione), ma ha funzionato per me.

0

Ho avuto lo stesso problema, onReturn from Fragment B -> A, Fragment B sembra eseguire una transizione di diapositiva aggiuntiva. Per aggirarlo, ho inserito una transizione di dissolvenza per setReturnTransition() di un tempo più breve rispetto alla diapositiva che sembra abbastanza buona (poiché si dissolve nel frammento precedente). Il codice per questo è:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    Slide slideRight = new Slide(Gravity.RIGHT); 
    slideRight.setDuration(200); 
    fragment.setEnterTransition(slideRight); 
    Fade fade = new Fade(); 
    fade.setDuration(100); 
    fragment.setReturnTransition(fade); 
} 
Problemi correlati