Вставьте фрагмент обратно без воспроизведения Pop-Animation - PullRequest
53 голосов
/ 08 февраля 2012

Я помещаю фрагмент в стек фрагментов, используя следующий код:

FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_right,
     R.anim.slide_in_left, R.anim.slide_out_left);
fragmentTransaction.replace(getId(), newFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

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

Пример навигацииможет выглядеть так:

  • Пользователь находится на начальном экране с корневым фрагментом
  • Он выбирает элемент в корневом фрагменте, который затем отображает новый фрагмент, чтобы показать детали этоговещь.Для этого используется фрагментная транзакция, которая устанавливает анимацию для случая push и pop (поэтому, когда пользователь нажимает кнопку возврата, переход анимируется)
  • С этого фрагмента он запускает действие, которое (для любогопричина) удаляет элемент, который был только что показан
  • Когда это действие заканчивается, я хотел бы вернуться к корневому фрагменту, не показывая «всплывающую анимацию» «фрагмента детали»

Есть ли способ вставить фрагмент обратно без воспроизведения указанной поп-анимации?

Ответы [ 12 ]

0 голосов
/ 19 апреля 2013

Прежде чем ответить на ваш вопрос, мне нужно задать вопрос самостоятельно.

В методе onBackPressed () второго действия вы можете получить доступ к обратному стэку первого действия?

Если да, то вы можете вызвать popBackStackImmediate (String trnaisiotnName, int inclusive), и он удалит переход фрагмента из backstack, и вам не нужно беспокоиться об анимации.

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

0 голосов
/ 14 февраля 2012

Просто используйте другой перегруженный метод setCustomAnimation(), в котором не устанавливайте R.anim.slide_out , и это решит вашу проблему

Приветствия:)

...