Android Fragment Animation onResume

Вот ситуация:

Я использую дочерний фрагмент, введенный с API 17. Скажем, у меня есть

ActivityA -> FragmentA ActivityA -> FragmentB FragmentA -> ChildFragmentA FragmentA -> ChildFragmentB 

Итак, я на ActivityA->FragmentA->ChildFragmentA и я ActivityA->FragmentA->ChildFragmentA к ActivityA->FragmentA->ChildFragmentB с помощью FragmentTransaction, используя анимацию для добавления в backstack и выскакивание backstack (есть анимация, когда я перехожу к ChildFragmentB и анимации Когда я отжимаю назад и перехожу к ChildFragmentA).

Теперь я перехожу к ActivityA->FragmentB (FragmentA уже не привязан). Когда я вернусь к ActivityA->FragmentA где ChildFragmentB , ChildFragmentB оживляет, как это ChildFragmentA при ChildFragmentA из ChildFragmentA .

Я хочу отключить эту анимацию при возобновлении Activity->FragmentA . Но держите его при переходе между фрагментами детей. Эта анимация устанавливается в FragmentTransaction. Есть ли способ сделать это возможным?

Solutions Collecting From Web of "Android Fragment Animation onResume"

Я решил это, добавив некоторую логику в родительский фрагмент, чтобы обнаружить, когда он скрыт или показан, и явно отключить или включить анимацию в своем дочернем элементе.

 @Override public void onPause() { super.onPause(); // If this fragment is being closed/replaced then disable animations // in child fragments. Otherwise we get very nasty visual effects // with the parent and child animations running simultaneously ChildFragment f = (ChildFragment) getChildFragmentManager() .findFragmentByTag(FRAGMENT_CHILD); if (f != null) { f.disableAnimations(); } } @Override public void onResume() { super.onResume(); // if this fragment is being opened then re-enable animations // in child fragments ChildFragment f = (ChildFragment) getChildFragmentManager() .findFragmentByTag(FRAGMENT_CHILD); if (f != null) { f.enableAnimations(); } } 

В дочернем фрагменте нам необходимо реализовать эти методы для включения / отключения анимации. Мы делаем это путем переопределения onCreateAnimation() и использования статической анимации ( R.anim.hold ) в случае, когда анимация должна быть отключена.

 private boolean mDisableAnimations; void disableAnimations() { mDisableAnimations = true; } void enableAnimations() { mDisableAnimations = false; } @Override public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) { if (mDisableAnimations) { return AnimationUtils.loadAnimation(getActivity(), R.anim.hold); } return super.onCreateAnimation(transit, enter, nextAnim); } 

Статическая анимация определяется в res/anim/hold.xml как:

 <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" android:toXDelta="0" android:duration="2000" /> 

Попробуйте отключить переход onAttach в ActivityA-> FragmentA и снова включить его снова в разделе «Воспроизведение» в ChildFragments как FragmentA, так и B