30

In setCustomAnimations() it takes four resource id for the animation. Not really understand them. If someone having clearer picture of it it would be appreciated if you could explain.

Let's say having fragment A add in the place holder and backstack.

FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.holder, fragA, FragmentA.FRAGMENT_NAME);
        ft.addToBackStack(FragmentA.FRAGMENT_NAME);
        ft.setCustomAnimations(R.anim.slide_in_from_bottom, R.anim.slide_in_from_top, R.anim.slide_in_from_left, R.anim.slide_in_from_right);
        ft.show(frag);
        ft.commit();

And the replace with fragment B:

FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.holder, fragB, FragmentB.FRAGMENT_NAME);
        ft.addToBackStack(FragmentB.FRAGMENT_NAME);
        ft.setCustomAnimations(R.anim.slide_in_from_bottom, R.anim.slide_in_from_top, R.anim.slide_in_from_left, R.anim.slide_in_from_right);
        ft.show(frag);
        ft.commit();

next time if do a popstack()

fm.popBackStackImmediate(FragmentB.FRAGMENT_NAME,
                                FragmentManager.POP_BACK_STACK_INCLUSIVE);

Which transaction's animation it will be running from?

/**
 * Set specific animation resources to run for the fragments that are
 * entering and exiting in this transaction. The <code>popEnter</code>
 * and <code>popExit</code> animations will be played for enter/exit
 * operations specifically when popping the back stack.
 */
public abstract FragmentTransaction setCustomAnimations(@AnimRes int enter,
        @AnimRes int exit, @AnimRes int popEnter, @AnimRes int popExit);
Ellen Spertus
  • 6,576
  • 9
  • 50
  • 101
lannyf
  • 9,865
  • 12
  • 70
  • 152

1 Answers1

80

Let's start simple case:

Replace Fragment A with Fragment B (your second code snippet)

  • Fragment B runs enter animation
  • Fragment A runs exit animation

Press back button and undo the replace operation

  • Fragment B runs popExit animation
  • Fragment A runs popEnter animation

Now to answer your question.

You don't say if the container already has a fragment or not. Let's consider both cases:

  1. Container already had a fragment (let's call it Fragment 0) when the first operation to replace with Fragment A was called. When popping the entire stack:

    • Fragment B runs popExit animation (set in second snippet)
    • Fragment 0 runs popEnter animation (set in first snippet)
  2. Container was empty so replacing with Fragment A was essentially an add operation. When popping entire stack:

    • Fragment B runs popExit animation (set in second snippet)
    • No popEnter animation runs since container is now empty
kris larson
  • 30,387
  • 5
  • 62
  • 74