Совместная анимация элемента без backstack - PullRequest
0 голосов
/ 09 марта 2019

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

Я не хочу добавлять функцию ToTackStack для перехода фрагмента.И фрагмент детали возвращается без анимации для некоторых случаев. (fragmentMain-> фрагментDetail)

DetailFragment detailFragment = new DetailFragment();
Transition moveTransition = TransitionInflater.from(MainActivity.singleInstance)
            .inflateTransition(android.R.transition.move); // android.R.transition.move
moveTransition.setDuration(400);

detailFragment.setSharedElementEnterTransition(moveTransition);

FragmentManager fragmentManager = MainActivity.getActivityFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction()
            .addSharedElement(sharedView, sharedView.getTransitionName())
            .replace(R.id.mainLayout, detailFragment);

fragmentTransaction.commitAllowingStateLoss();
fragmentManager.executePendingTransactions();

Этот код работает для меня.Я знаю, что, если я использую addToBackStack, fragmageDetail-> fragmageMain , то анимация работает автоматически.Но я не хочу использовать обратный стек.

Ниже код не работает для fragmageDetail- >gmentMain.

detailFragment.setSharedElementReturnTransition(moveTransition);
mainFragment.setSharedElementEnterTransition(moveTransition);

FragmentManager fragmentManager = MainActivity.getActivityFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction()
            .addSharedElement(textView, textView.getTransitionName())
            .replace(R.id.mainLayout, mainFragment);

fragmentTransaction.commitAllowingStateLoss();
fragmentManager.executePendingTransactions();

Как я могу поделитьсяэлемент анимации для этого случая?

1 Ответ

0 голосов
/ 11 марта 2019

Посмотрите на свою функцию onCreateView. Если воссоздать макет, он нарушает идентификатор перехода.

Решение:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    if(inflatedView != null)
        return inflatedView;
    inflatedView = inflater.inflate(R.layout.fragment_blank, container, 
    return inflatedView;
}
...