Skip to content Skip to sidebar Skip to footer

How To Know When Enter Transition Ended On Fragment?

I have a fragment, which shows enter animation, I set transition by this.setEnterTransition(transition); After that I want to show another animation. But I need to know when trans

Solution 1:

transition.addListener(new Transition.TransitionListener() {
                    @Override
                    public void onTransitionStart(Transition transition) {}

                    @Override
                    public void onTransitionEnd(Transition transition) {}

                    @Override
                    public void onTransitionCancel(Transition transition) {}

                    @Override
                    public void onTransitionPause(Transition transition) {}

                    @Override
                    public void onTransitionResume(Transition transition) {}
                });

                this.setEnterTransition(transition);

Solution 2:

If you have the following setup:

FragmentA calls FragmentB with a SharedElementEnterTransition like

privatefinalTransitionSettransition=newTransitionSet()
        .addTransition(newChangeBounds());
//...FragmentTransactiontransaction= getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, fragment, fragment.getClass().getSimpleName());

transaction.addSharedElement(view, view.getTransitionName());
fragment.setSharedElementEnterTransition(transition);
fragment.setSharedElementReturnTransition(transition);
transaction.commit();

to listen for the end of the SharedElementTransition in your second Fragment. Then you have to get the SharedElementEnterTransition in your FragmentB's onAttach like:

@OverridepublicvoidonAttach(Context context) {
    super.onAttach(context);
    TransitionSet transitionSet = (TransitionSet) getSharedElementEnterTransition();
    if (transitionSet != null) {
        transitionSet.addListener(newTransition.TransitionListener() {
            @OverridepublicvoidonTransitionEnd(@NonNull Transition transition) {
                // remove listener as otherwise there are side-effects
                transition.removeListener(this);
                // do something here
            }

            @OverridepublicvoidonTransitionStart(@NonNull Transition transition) {}
            @OverridepublicvoidonTransitionCancel(@NonNull Transition transition) {}
            @OverridepublicvoidonTransitionPause(@NonNull Transition transition) {}
            @OverridepublicvoidonTransitionResume(@NonNull Transition transition) {}
        });
    }
}

As pointed out in the comments of this answer there is a bug when not setting the listener in onAttach().

Post a Comment for "How To Know When Enter Transition Ended On Fragment?"