2016-07-14 4 views
2

Ich benutze eine einfache Folie links, gleiten Sie nach rechts benutzerdefinierte Animation, wenn ich FragmentTransaction. Mein Problem ist, dass das Fragment, das ich mit der Transaktionsanimation lade, Code in der onResume() enthält, um einen HTTP-Aufruf zu machen, der dazu führt, dass mein Fortschrittsdialog "Bitte warten" angezeigt wird. Es funktioniert, aber ich möchte meinen Code von onResume zu einer anderen Methode im Fragment verschieben, die nicht ausgelöst wird, bis das Fragment vollständig geladen ist. Mit anderen Worten, wenn die Animation abgeschlossen ist und vollständig an ihren Platz geschoben wurde.Fragment - Warten Sie, bis die Transaktionsanimation abgeschlossen ist

Ich benutze dies das neue Fragment zu starten

FragmentManager manager = getSupportFragmentManager(); 
FragmentTransaction ft = manager.beginTransaction(); 
ft.setCustomAnimation(R.anim.slide_in_right, R.anim.slide_out_left); 
ft.replace(R.id.realtabcontent, new MyFragment()); 
ft.commit(); 

und ich möchte die Methode in MyNewFragment() initialisiert werden, nachdem die Animation zu 100% abgeschlossen

ist Ist

das möglich?

+0

@Tony - war gerade dabei, Ihre Antwort als korrekt zu akzeptieren und Sie löschten es – Phil

+0

Die beste Erklärung für Fragment-Animation finden Sie hier (http://StackOverflow.com/a/20480676/1972597). Allerdings würde ich den zweiten Ansatz aus meiner Antwort für Ihr spezielles Problem empfehlen, da es eine bessere Benutzererfahrung wäre. – Tony

Antwort

0

Es gibt zwei Ansätze hier möglich,

  1. Implementieren einen AnimationListener auf der Einschub-Animation.

    animation.setAnimationListener(new Animation.AnimationListener() { 
          @Override 
          public void onAnimationStart(Animation animation) { 
    
          } 
    
          @Override 
          public void onAnimationEnd(Animation animation) { 
    
          } 
    
          @Override 
          public void onAnimationRepeat(Animation animation) { 
    
          } 
         }); 
    

In onAnimationEnd() dem Hörer, ein Verfahren, in dem Fragmente ruft den HTTP-Aufruf zu machen.

  1. Der obige Ansatz verschwendet nur wegen der Animation Zeit. Anstatt also einen Fortschrittsdialog zu erstellen, implementieren Sie einen kreisförmigen Fortschrittsbalken in Ihrem Fragment. Auf diese Weise können Ihre Animation und Ihr http-Aufruf gleichzeitig erfolgen. Sobald Sie die Antwort erhalten haben, entfernen Sie das Fortschrittsdrehfeld und zeigen Sie Ihre tatsächlichen Fragmentansichten an.
+2

Ich verwende XML-basierte Animationen, wie würde ich einen Animations-Listener hinzufügen? – Phil

+0

@Phil hast du eine Lösung für dein Problem gefunden? – ymerdrengene