2016-10-20 6 views
3

Я показываю FrameLayout с некоторыми компонентами внутри Fragment. В onCreateView(..) Я оживляю содержание FrameLayout, и все работает отлично. Теперь я хочу анимировать содержимое перед закрытием Fragment.Анимация содержимого фрагментов перед закрытием

В моем текущем решении я переопределение onBackPressed() в родительском Activity, а затем я звоню метод onBackPressed() внутри моей Fragment и анимировать содержимое. Проблема с этим решением заключается в том, что я хочу раздуть Fragment от различных действий, а затем это не очень хорошее решение ... Кто-нибудь знает лучший подход?

Благодарим за помощь!

Примечание:

Я также попытался переопределить onCreateView() и onPause() но анимация не отображается, если я начинаю его в этих методах

и следующий метод не выполняет мои требования или как оно одушевляет весь фрагмент, и я хочу, чтобы анимировать содержимое

getActivity().getSupportFragmentManager() 
      .beginTransaction() 
      .setCustomAnimations(R.anim.slide_in_up, R.anim.slide_out_up, R.anim.slide_out_down, R.anim.slide_in_down) 
+0

Что не так с 'onDestroyView()' самого 'Fragment'? – Abbas

+0

Я уже пробовал анимировать содержимое в 'onDestroyView()' и 'onPause()', но он не работает в обоих из них. – Katharina

ответ

2

может быть, вы можете попробовать справиться onBackPressed в вашей fragment как показано ниже:

yourRootLayout.setFocusableInTouchMode(true); 
    yourRootLayout.requestFocus(); 
    yourRootLayout.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){ 
       animateMyViews(); 
       return true; 
      } 
      return false; 
     } 
    }); 
+0

, который сработал спасибо! Я только изменил одно: я заменил getView() моим rootLayout, потому что getView() вернул null в onCreateView – Katharina

+0

уверен. жаль, что я забыл добавить свой пример кода, должен работать в onResume – savepopulation

0

Я думаю, что вам нужно, чтобы уведомить Fragment, что вы собираетесь уничтожить его.

Сырой псевдокод может выглядеть

myFragment.aboutToClose(); 

While в aboutToClose() методы ваших Fragment «S.

public void aboutToClose() 
{ 
    // Perform all the animations you want. 
    // Don't forget to add onAnimationEnd() call back. 

    onAnimationEnd() 
    { 
     // Notify Activity that Animations have completed. 
     callback.animationsCompleted(); 
    } 
} 

И наконец, в вашем вызове Activity.

public void animationsCompleted() 
{ 
    // Destroy fragment. 
    getActivity().getSupportFragmentManager() 
     .beginTransaction() 
     .setCustomAnimations(R.anim.slide_in_up, R.anim.slide_out_up, R.anim.slide_out_down, R.anim.slide_in_down); 
} 
+0

Спасибо, но я искал решение, в котором мне не нужно менять какой-либо код в активности, потому что я хочу раздуть фрагмент из различных действий – Katharina

Смежные вопросы