Class FragmentTransaction
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
Bit mask that is set for all enter transitions.static final int
Bit mask that is set for all exit transitions.static final int
Fragment is being removed from the stackstatic final int
Fragment should simply fade in or out; that is, no strong navigation associated with it except that it is appearing or disappearing for some reason.static final int
Fragment is being removed from the stack with Activity close transition.static final int
Fragment is being added onto the stack with Activity open transition.static final int
Fragment is being added onto the stackstatic final int
No animation for transition.static final int
Not set up for a transition. -
Method Summary
Modifier and TypeMethodDescriptionCallsadd(int, Fragment, String)
with a null tag.Add a fragment to the activity state.final FragmentTransaction
Callsadd(int, Class, DataSet, String)
with a null tag.final FragmentTransaction
Add a fragment to the activity state.Callsadd(int, Fragment, String)
with a 0 containerViewId.final FragmentTransaction
Callsadd(int, Class, DataSet, String)
with a 0 containerViewId.addSharedElement
(View sharedElement, String name) Used with custom Transitions to map a View from a removed or hidden Fragment to a View from a shown or added Fragment.addToBackStack
(String name) Add this transaction to the back stack.Re-attach a fragment after it had previously been detached from the UI withdetach(Fragment)
.abstract int
commit()
Schedules a commit of this transaction.abstract int
Likecommit()
but allows the commit to be executed after an activity's state is saved.abstract void
Commits this transaction synchronously.abstract void
LikecommitNow()
but allows the commit to be executed after an activity's state is saved.Detach the given fragment from the UI.Disallow calls toaddToBackStack(String)
.Hides an existing fragment.boolean
Returns true if this FragmentTransaction is allowed to be added to the back stack.boolean
isEmpty()
Remove an existing fragment.Callsreplace(int, Fragment, String)
with a null tag.Replace an existing fragment that was added to a container.final FragmentTransaction
Callsreplace(int, Class, DataSet, String)
with a null tag.final FragmentTransaction
Replace an existing fragment that was added to a container.runOnCommit
(Runnable runnable) Add a Runnable to this transaction that will be run after this transaction has been committed.setCustomAnimations
(int enter, int exit) Set specific animation resources to run for the fragments that are entering and exiting in this transaction.setCustomAnimations
(int enter, int exit, int popEnter, int popExit) Set specific animation resources to run for the fragments that are entering and exiting in this transaction.setMaxLifecycle
(Fragment fragment, Lifecycle.State state) Set a ceiling for the state of an active fragment in this FragmentManager.setPrimaryNavigationFragment
(Fragment fragment) Set a currently active fragment in this FragmentManager as the primary navigation fragment.setReorderingAllowed
(boolean reorderingAllowed) Sets whether to allow optimizing operations within and across transactions.setTransition
(int transition) Select a standard transition animation for this transaction.Shows a previously hidden fragment.
-
Field Details
-
TRANSIT_ENTER_MASK
public static final int TRANSIT_ENTER_MASKBit mask that is set for all enter transitions.- See Also:
-
TRANSIT_EXIT_MASK
public static final int TRANSIT_EXIT_MASKBit mask that is set for all exit transitions.- See Also:
-
TRANSIT_UNSET
public static final int TRANSIT_UNSETNot set up for a transition.- See Also:
-
TRANSIT_NONE
public static final int TRANSIT_NONENo animation for transition.- See Also:
-
TRANSIT_FRAGMENT_OPEN
public static final int TRANSIT_FRAGMENT_OPENFragment is being added onto the stack- See Also:
-
TRANSIT_FRAGMENT_CLOSE
public static final int TRANSIT_FRAGMENT_CLOSEFragment is being removed from the stack- See Also:
-
TRANSIT_FRAGMENT_FADE
public static final int TRANSIT_FRAGMENT_FADEFragment should simply fade in or out; that is, no strong navigation associated with it except that it is appearing or disappearing for some reason.- See Also:
-
TRANSIT_FRAGMENT_MATCH_ACTIVITY_OPEN
public static final int TRANSIT_FRAGMENT_MATCH_ACTIVITY_OPENFragment is being added onto the stack with Activity open transition.- See Also:
-
TRANSIT_FRAGMENT_MATCH_ACTIVITY_CLOSE
public static final int TRANSIT_FRAGMENT_MATCH_ACTIVITY_CLOSEFragment is being removed from the stack with Activity close transition.- See Also:
-
-
Method Details
-
add
@Nonnull public final FragmentTransaction add(@Nonnull Class<? extends Fragment> fragmentClass, @Nullable DataSet args, @Nullable String tag) Callsadd(int, Class, DataSet, String)
with a 0 containerViewId. -
add
Callsadd(int, Fragment, String)
with a 0 containerViewId. -
add
@Nonnull public final FragmentTransaction add(int containerViewId, @Nonnull Class<? extends Fragment> fragmentClass, @Nullable DataSet args) Callsadd(int, Class, DataSet, String)
with a null tag. -
add
Callsadd(int, Fragment, String)
with a null tag. -
add
@Nonnull public final FragmentTransaction add(int containerViewId, @Nonnull Class<? extends Fragment> fragmentClass, @Nullable DataSet args, @Nullable String tag) Add a fragment to the activity state. This fragment may optionally also have its view (ifFragment.onCreateView
returns non-null) into a container view of the activity.- Parameters:
containerViewId
- Optional identifier of the container this fragment is to be placed in. If 0, it will not be placed in a container.fragmentClass
- The fragment to be added, created via theFragmentManager's FragmentFactory
.args
- Optional arguments to be set on the fragment.tag
- Optional tag name for the fragment, to later retrieve the fragment withFragmentManager.findFragmentByTag(String)
.- Returns:
- Returns the same FragmentTransaction instance.
-
add
@Nonnull public FragmentTransaction add(int containerViewId, @Nonnull Fragment fragment, @Nullable String tag) Add a fragment to the activity state. This fragment may optionally also have its view (ifFragment.onCreateView
returns non-null) into a container view of the activity.- Parameters:
containerViewId
- Optional identifier of the container this fragment is to be placed in. If 0, it will not be placed in a container.fragment
- The fragment to be added. This fragment must not already be added to the activity.tag
- Optional tag name for the fragment, to later retrieve the fragment withFragmentManager.findFragmentByTag(String)
.- Returns:
- Returns the same FragmentTransaction instance.
-
replace
@Nonnull public final FragmentTransaction replace(int containerViewId, @Nonnull Class<? extends Fragment> fragmentClass, @Nullable DataSet args) Callsreplace(int, Class, DataSet, String)
with a null tag. -
replace
Callsreplace(int, Fragment, String)
with a null tag. -
replace
@Nonnull public final FragmentTransaction replace(int containerViewId, @Nonnull Class<? extends Fragment> fragmentClass, @Nullable DataSet args, @Nullable String tag) Replace an existing fragment that was added to a container. This is essentially the same as callingremove(Fragment)
for all currently added fragments that were added with the same containerViewId and thenadd(int, Fragment, String)
with the same arguments given here.- Parameters:
containerViewId
- Identifier of the container whose fragment(s) are to be replaced.fragmentClass
- The new fragment to place in the container, created via theFragmentManager's FragmentFactory
.args
- Optional arguments to be set on the fragment.tag
- Optional tag name for the fragment, to later retrieve the fragment withFragmentManager.findFragmentByTag(String)
.- Returns:
- Returns the same FragmentTransaction instance.
-
replace
@Nonnull public FragmentTransaction replace(int containerViewId, @Nonnull Fragment fragment, @Nullable String tag) Replace an existing fragment that was added to a container. This is essentially the same as callingremove(Fragment)
for all currently added fragments that were added with the same containerViewId and thenadd(int, Fragment, String)
with the same arguments given here.- Parameters:
containerViewId
- Identifier of the container whose fragment(s) are to be replaced.fragment
- The new fragment to place in the container.tag
- Optional tag name for the fragment, to later retrieve the fragment withFragmentManager.findFragmentByTag(String)
.- Returns:
- Returns the same FragmentTransaction instance.
-
remove
Remove an existing fragment. If it was added to a container, its view is also removed from that container.- Parameters:
fragment
- The fragment to be removed.- Returns:
- Returns the same FragmentTransaction instance.
-
hide
Hides an existing fragment. This is only relevant for fragments whose views have been added to a container, as this will cause the view to be hidden.- Parameters:
fragment
- The fragment to be hidden.- Returns:
- Returns the same FragmentTransaction instance.
-
show
Shows a previously hidden fragment. This is only relevant for fragments whose views have been added to a container, as this will cause the view to be shown.- Parameters:
fragment
- The fragment to be shown.- Returns:
- Returns the same FragmentTransaction instance.
-
detach
Detach the given fragment from the UI. This is the same state as when it is put on the back stack: the fragment is removed from the UI, however its state is still being actively managed by the fragment manager. When going into this state its view hierarchy is destroyed.- Parameters:
fragment
- The fragment to be detached.- Returns:
- Returns the same FragmentTransaction instance.
-
attach
Re-attach a fragment after it had previously been detached from the UI withdetach(Fragment)
. This causes its view hierarchy to be re-created, attached to the UI, and displayed.- Parameters:
fragment
- The fragment to be attached.- Returns:
- Returns the same FragmentTransaction instance.
-
setMaxLifecycle
@Nonnull public FragmentTransaction setMaxLifecycle(@Nonnull Fragment fragment, @Nonnull Lifecycle.State state) Set a ceiling for the state of an active fragment in this FragmentManager. If fragment is already above the received state, it will be forced down to the correct state.The fragment provided must currently be added to the FragmentManager to have it's Lifecycle state capped, or previously added as part of this transaction. If the
Lifecycle.State.INITIALIZED
is passed in as theLifecycle.State
and the provided fragment has already moved beyondLifecycle.State.INITIALIZED
, anIllegalArgumentException
will be thrown.If the
Lifecycle.State.DESTROYED
is passed in as theLifecycle.State
anIllegalArgumentException
will be thrown.- Parameters:
fragment
- the fragment to have it's state capped.state
- the ceiling state for the fragment.- Returns:
- the same FragmentTransaction instance
-
isEmpty
public boolean isEmpty()- Returns:
true
if this transaction contains no operations,false
otherwise.
-
setCustomAnimations
Set specific animation resources to run for the fragments that are entering and exiting in this transaction. These animations will not be played when popping the back stack.This method applies the custom animations to all future fragment operations; previous operations are unaffected. Fragment operations in the same
FragmentTransaction
can set different animations by calling this method prior to each operation, e.g:fragmentManager.beginTransaction() .setCustomAnimations(enter1, exit1) .add(MyFragmentClass, args, tag1) // this fragment gets the first animations .setCustomAnimations(enter2, exit2) .add(MyFragmentClass, args, tag2) // this fragment gets the second animations .commit()
- Parameters:
enter
- An animation or animator resource ID used for the enter animation on the view of the fragment being added or attached.exit
- An animation or animator resource ID used for the exit animation on the view of the fragment being removed or detached.
-
setCustomAnimations
@Nonnull public FragmentTransaction setCustomAnimations(int enter, int exit, int popEnter, int popExit) Set specific animation resources to run for the fragments that are entering and exiting in this transaction. ThepopEnter
andpopExit
animations will be played for enter/exit operations specifically when popping the back stack.This method applies the custom animations to all future fragment operations; previous operations are unaffected. Fragment operations in the same
FragmentTransaction
can set different animations by calling this method prior to each operation, e.g:fragmentManager.beginTransaction() .setCustomAnimations(enter1, exit1, popEnter1, popExit1) .add(MyFragmentClass, args, tag1) // this fragment gets the first animations .setCustomAnimations(enter2, exit2, popEnter2, popExit2) .add(MyFragmentClass, args, tag2) // this fragment gets the second animations .commit()
- Parameters:
enter
- An animation or animator resource ID used for the enter animation on the view of the fragment being added or attached.exit
- An animation or animator resource ID used for the exit animation on the view of the fragment being removed or detached.popEnter
- An animation or animator resource ID used for the enter animation on the view of the fragment being re-added or re-attached caused byFragmentManager.popBackStack()
or similar methods.popExit
- An animation or animator resource ID used for the enter animation on the view of the fragment being removed or detached caused byFragmentManager.popBackStack()
or similar methods.
-
setTransition
Select a standard transition animation for this transaction. May be one ofTRANSIT_NONE
,TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
, orTRANSIT_FRAGMENT_FADE
. -
addToBackStack
Add this transaction to the back stack. This means that the transaction will be remembered after it is committed, and will reverse its operation when later popped off the stack.setReorderingAllowed(boolean)
must be set totrue
in the same transaction as addToBackStack() to allow the pop of that transaction to be reordered.- Parameters:
name
- An optional name for this back stack state, or null.
-
isAddToBackStackAllowed
public boolean isAddToBackStackAllowed()Returns true if this FragmentTransaction is allowed to be added to the back stack. If this method returns false,addToBackStack(String)
will throwIllegalStateException
.- Returns:
- True if
addToBackStack(String)
is permitted on this transaction.
-
disallowAddToBackStack
Disallow calls toaddToBackStack(String)
. Any future calls to addToBackStack will throwIllegalStateException
. If addToBackStack has already been called, this method will throw IllegalStateException. -
setReorderingAllowed
Sets whether to allow optimizing operations within and across transactions. This will remove redundant operations, eliminating operations that cancel. For example, if two transactions are executed together, one that adds a fragment A and the next replaces it with fragment B, the operations will cancel and only fragment B will be added. That means that fragment A may not go through the creation/destruction lifecycle.The side effect of removing redundant operations is that fragments may have state changes out of the expected order. For example, one transaction adds fragment A, a second adds fragment B, then a third removes fragment A. Without removing the redundant operations, fragment B could expect that while it is being created, fragment A will also exist because fragment A will be removed after fragment B was added. With removing redundant operations, fragment B cannot expect fragment A to exist when it has been created because fragment A's add/remove will be optimized out.
It can also reorder the state changes of Fragments to allow for better Transitions. Added Fragments may have
Fragment.onCreate(DataSet)
called before replaced Fragments haveFragment.onDestroy()
called.Fragment.postponeEnterTransition()
requiressetReorderingAllowed(true)
.The default is
false
.- Parameters:
reorderingAllowed
-true
to enable optimizing out redundant operations orfalse
to disable optimizing out redundant operations on this transaction.
-
runOnCommit
Add a Runnable to this transaction that will be run after this transaction has been committed. If fragment transactions areoptimized
this may be after other subsequent fragment operations have also taken place, or operations in this transaction may have been optimized out due to the presence of a subsequent fragment transaction in the batch.If a transaction is committed using
commitAllowingStateLoss()
this runnable may be executed when the FragmentManager is in a state where new transactions may not be committed without allowing state loss.runOnCommit
may not be used with transactionsadded to the back stack
as Runnables cannot be persisted with back stack state.IllegalStateException
will be thrown ifaddToBackStack(String)
has been previously called for this transaction or if it is called after a call torunOnCommit
.- Parameters:
runnable
- Runnable to add- Returns:
- this FragmentTransaction
- Throws:
IllegalStateException
- ifaddToBackStack(String)
has been called
-
commit
public abstract int commit()Schedules a commit of this transaction. The commit does not happen immediately; it will be scheduled as work on the main thread to be done the next time that thread is ready.A transaction can only be committed with this method prior to its containing activity saving its state. If the commit is attempted after that point, an exception will be thrown. This is because the state after the commit can be lost if the activity needs to be restored from its state. See
commitAllowingStateLoss()
for situations where it may be okay to lose the commit.- Returns:
- Returns the identifier of this transaction's back stack entry,
if
addToBackStack(String)
had been called. Otherwise, returns a negative number.
-
commitAllowingStateLoss
public abstract int commitAllowingStateLoss()Likecommit()
but allows the commit to be executed after an activity's state is saved. This is dangerous because the commit can be lost if the activity needs to later be restored from its state, so this should only be used for cases where it is okay for the UI state to change unexpectedly on the user. -
commitNow
public abstract void commitNow()Commits this transaction synchronously. Any added fragments will be initialized and brought completely to the lifecycle state of their host and any removed fragments will be torn down accordingly before this call returns. Committing a transaction in this way allows fragments to be added as dedicated, encapsulated components that monitor the lifecycle state of their host while providing firmer ordering guarantees around when those fragments are fully initialized and ready. Fragments that manage views will have those views created and attached.Calling
commitNow
is preferable to callingcommit()
followed byFragmentManager.executePendingTransactions()
as the latter will have the side effect of attempting to commit all currently pending transactions whether that is the desired behavior or not.Transactions committed in this way may not be added to the FragmentManager's back stack, as doing so would break other expected ordering guarantees for other asynchronously committed transactions. This method will throw
IllegalStateException
if the transaction previously requested to be added to the back stack withaddToBackStack(String)
.A transaction can only be committed with this method prior to its containing activity saving its state. If the commit is attempted after that point, an exception will be thrown. This is because the state after the commit can be lost if the activity needs to be restored from its state. See
commitAllowingStateLoss()
for situations where it may be okay to lose the commit. -
commitNowAllowingStateLoss
public abstract void commitNowAllowingStateLoss()LikecommitNow()
but allows the commit to be executed after an activity's state is saved. This is dangerous because the commit can be lost if the activity needs to later be restored from its state, so this should only be used for cases where it is okay for the UI state to change unexpectedly on the user.
-