2016-07-30 75 views
0

我必須在返回到前一個片段時顯示動畫,所以我必須使用onBackPressed方法。因爲它是avaible只是在活動中,我試圖用一個參考:對片段使用onBackPressed

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

而在InfoFragment我定義onBackButtonPressed方法,但沒有奏效。 所以,我想是這樣的:

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

那麼,它爲什麼沒有工作?

+0

第一種方法應該可以正常工作,但我不認爲需要自定義後退按鈕偵聽器。請參閱http://stackoverflow.com/questions/10886669/how-to-reverse-fragment-animations-on-backstack –

+0

'onBackPressed()'屬於Activity,而不屬於片段 –

+0

只需使用setCustomAnimations和FragmentTransaction即可。 – sswierczek

回答

0

如果您想延遲背按活動,直到您的自定義動畫完成,則應根據此代碼段重寫您的代碼。

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

什麼是可運行的?

你的onBackButtonPressed方法應該得到一個可運行的對象,並在自定義動畫結束後運行它。這個可運行的被用作回調函數。

通過這種方式,您可以延遲致電super.onBackPressed(),因此您可以先播放動畫,然後將活動轉播給活動的超級班。

什麼時候應該調用這個可運行的?

對於您的自定義動畫,請附上animation listener並在onAnimationEnd方法中調用該可運行的方法。

相關問題