16

В Android Lollipop методы Activity#postponeEnterTransition() и Activity#startPostponedEnterTransition() дают активности возможность задерживать начало входящих и выходящих общих переходов элементов до тех пор, пока все данные не будут загружены. Они отлично подходят для переходов Activity.Как отложить переход Fragment в Android Lollipop?

Есть ли способ достичь такого же эффекта при использовании переходов Fragment?

ответ

12

В Fragment Transitions нет прямого эквивалента, поскольку Fragments используют FragmentTransaction, и мы не можем отложить то, что должно произойти в транзакции.

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

getFragmentManager().beginTransaction() 
    .add(R.id.container, fragment2) 
    .hide(fragment2) 
    .commit(); 

Позже, когда FRAGMENT2 готов:

getFragmentManager().beginTransaction() 
    .addSharedElement(sharedElement, "name") 
    .remove(fragment1) 
    .show(fragment2) 
    .commit(); 
+0

Awesome, спасибо много! –

+0

Ничего, но как мы отложим настройку фрагмента 1 после того, как мы закончим в фрагменте2 и вызывается FragmentManager.popBackStack()? – mennovogel

+0

Если вы не удалите фрагмент1, а спрячьте его, это упростит вашу жизнь. Если нет, необходим дополнительный шаг, но он работает одинаково. a) добавить 2, скрыть 2 b) показать 2, скрыть, добавить в задний стек 1 c) показать 1, remove1, добавить в задний стек. Затем вы обнаружите, что вы пришли к (c) во второй раз, вы ждете, что 1 будет готов, а затем программным путем поместите задний стек. –