5

Beim Ersetzen von Fragment, verwende ich Slide-Animation für Android Lollipop-Version. Es funktioniert wie erwartet für diese spezielle Ersetzung, aber beim Drücken der Taste zurückspringt es zuerst aktuelles Fragment &, dann wird die Umkehrung der Eingabe-Animation (slide out) ausgeführt.android lollipop - settentransition() für Fragment funktioniert nicht ordnungsgemäß beim Beenden

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

Also, wie Fragment zu Pop-Back erst nach dem Reverse-Animation der Folie zu erzwingen, ist beendet? Ich habe festgestellt, dass die Methode methode finishAfterTransition() bereitgestellt wurde. Gibt es etwas Ähnliches für Frgament?

+0

Lesen Sie mehr über Übergänge hier: www.androiddesignpatterns.com/2014/12/activity-fragment-content-transitions-in-depth-part2.html – pskink

+0

separaten Rück Übergang Hinzufügen auch Shows das gleiche Verhalten. Dia-Folie = neue Folie (Gravity.BOTTOM); slide.setDuration (1000); replaceBy.setEnterTransition (Folie); \t \t slide = neuer Slide (Gravity.BOTTOM); slide.setDuration (1000); replaceBy.setReturnTransition (Folie); – Ankur

+0

Können Sie eine Bildschirmaufnahme des Verhaltens, das Sie gerade erleben (es ist schwer zu sagen, was Sie genau beschreiben). Android Studio verfügt über ein Tool zur Bildschirmaufnahme, das hilfreich sein könnte. –

Antwort

0

ich mit ungefähr dem gleichen Muster das gleiche Problem hatte und war in der Lage, um es zu erhalten, indem meine Fragmente Übergang Posting:

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

nicht sicher, warum das Problem dadurch behoben (oder, wenn dies die absoluten richtig Lösung), aber es hat für mich funktioniert.

0

Ich hatte das gleiche Problem, onReturn von Fragment B -> A, Fragment B scheinen einen zusätzlichen Dia Übergang zu tun. Um es zu umgehen, gebe ich einen Übergangsübergang für setReturnTransition() von einer kürzeren Zeit ein als die Folie, die ziemlich gut aussieht (da sie sich in das vorherige Fragment auflöst). Der Code hierfür lautet:

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