2016-07-30 19 views
0

Ich muss eine Animation zeigen, wenn ich zum vorherigen Fragment zurück gehe, also muss ich eine onBackPressed-Methode verwenden. Da es nur in Aktivitäten avaible ist, habe ich versucht, einen Verweis zu verwenden:OnBackPressed für Fragmente verwenden

@Override 
onBackPressed(){ 
super.onBackPressed(); 
infoFragment.onBackButtonPressed(); 
} 

Und in den InfoFragment I definiert onBackButtonPressed Methode, aber es hat nicht funktioniert. So versuchte ich, wie folgt aus:

view.setFocusableInTouchMode(true); 
     view.requestFocus(); 
     view.setOnKeyListener(new View.OnKeyListener() { 
      @Override 
      public boolean onKey(View view, int i, KeyEvent keyEvent) { 
       if(i==KeyEvent.KEYCODE_BACK){ 
        MainActivity mainActivity=(MainActivity)getActivity(); 
        mainActivity.loadMainFragment(); 
        return true; 
       } 
       return false; 
      } 
     }); 

Also, warum es nicht funktioniert?

+0

Der erste Ansatz sollte gut funktionieren, aber ich denke nicht, dass ein benutzerdefinierter Rücktaste Listener benötigt. Siehe http://stackoverflow.com/questions/10886669/how-to-reverse-fragment-animations-on-backstack –

+0

'onBackPressed()' gehört zur Aktivität, nicht zum Fragment –

+0

Verwenden Sie einfach setCustomAnimations mit FragmentTransaction. – sswierczek

Antwort

0

Wenn Sie das Backpress-Ereignis verzögern möchten, bis Ihre benutzerdefinierte Animation beendet ist, sollten Sie Ihren Code gemäß diesem Code neu schreiben.

@Override 
public void onBackPressed(){ 
    infoFragment.onBackButtonPressed(new Runnable(){ 
     @Override 
     public void run(){ 
      super.onBackPressed(); 
     } 
    }); 
} 

Was ist das runnable?

Ihre onBackButtonPressed Methode sollte ein ausführbares Objekt erhalten und es ausführen, sobald die benutzerdefinierte Animation beendet ist. Dieser Runnable wird als Callback-Funktion verwendet.

Auf diese Weise verzögern Sie den Anruf auf super.onBackPressed(), so dass Sie zuerst Ihre Animation abspielen und dann das Ereignis an die Superklasse Ihrer Aktivität weiterleiten können.

Wann sollte ich das runnable nennen? dass runnable in onAnimationEnd Verfahren davon

Für ihre Animation, fügen Sie ein animation listener und ruft.

Verwandte Themen