FragmentTransaction
abstract class FragmentTransaction
Static library support version of the framework's android.app.FragmentTransaction. Used to write apps that run on platforms prior to Android 3.0. When running on Android 3.0 or above, this implementation is still used; it does not try to switch to the framework's implementation. See the framework SDK documentation for a class overview.
Summary
Constants |
|
|---|---|
const Int |
TRANSIT_ENTER_MASK = 4096Bit mask that is set for all enter transitions. |
const Int |
TRANSIT_EXIT_MASK = 8192Bit mask that is set for all exit transitions. |
const Int |
TRANSIT_FRAGMENT_CLOSE = 8194Fragment is being removed from the stack |
const Int |
TRANSIT_FRAGMENT_FADE = 4099Fragment should simply fade in or out; that is, no strong navigation associated with it except that it is appearing or disappearing for some reason. |
const Int |
Fragment is being removed from the stack with Activity close transition. |
const Int |
Fragment is being added onto the stack with Activity open transition. |
const Int |
TRANSIT_FRAGMENT_OPEN = 4097Fragment is being added onto the stack |
const Int |
TRANSIT_NONE = 0No animation for transition. |
const Int |
TRANSIT_UNSET = -1Not set up for a transition. |
Public constructors |
|---|
|
This function is deprecated. You should not instantiate a FragmentTransaction except via |
Public functions |
|
|---|---|
FragmentTransaction |
Calls |
FragmentTransaction |
Calls |
FragmentTransaction |
Add a fragment to the activity state. |
FragmentTransaction |
Calls |
FragmentTransaction |
Add a fragment to the activity state. |
FragmentTransaction |
Calls |
FragmentTransaction |
Add a fragment to the activity state. |
FragmentTransaction |
addSharedElement(sharedElement: View, name: String)Used with custom Transitions to map a View from a removed or hidden Fragment to a View from a shown or added Fragment. |
FragmentTransaction |
addToBackStack(name: String?)Add this transaction to the back stack. |
FragmentTransaction |
Re-attach a fragment after it had previously been detached from the UI with |
abstract Int |
commit()Schedules a commit of this transaction. |
abstract Int |
Like |
abstract Unit |
Commits this transaction synchronously. |
abstract Unit |
Like |
FragmentTransaction |
Detach the given fragment from the UI. |
FragmentTransaction |
Disallow calls to |
FragmentTransaction |
Hides an existing fragment. |
Boolean |
Returns true if this FragmentTransaction is allowed to be added to the back stack. |
Boolean |
isEmpty() |
FragmentTransaction |
Remove an existing fragment. |
FragmentTransaction |
Calls |
FragmentTransaction |
Calls |
FragmentTransaction |
Replace an existing fragment that was added to a container. |
FragmentTransaction |
Replace an existing fragment that was added to a container. |
FragmentTransaction |
runOnCommit(runnable: Runnable)Add a Runnable to this transaction that will be run after this transaction has been committed. |
FragmentTransaction |
This function is deprecated. This has been renamed |
FragmentTransaction |
This function is deprecated. Store breadcrumb short titles separately from fragment transactions. |
FragmentTransaction |
This function is deprecated. Store breadcrumb short titles separately from fragment transactions. |
FragmentTransaction |
This function is deprecated. Store breadcrumb titles separately from fragment transactions. |
FragmentTransaction |
This function is deprecated. Store breadcrumb titles separately from fragment transactions. |
FragmentTransaction |
setCustomAnimations(Set specific animation resources to run for the fragments that are entering and exiting in this transaction. |
FragmentTransaction |
setCustomAnimations(Set specific animation resources to run for the fragments that are entering and exiting in this transaction. |
FragmentTransaction |
setMaxLifecycle(fragment: Fragment, state: Lifecycle.State)Set a ceiling for the state of an active fragment in this FragmentManager. |
FragmentTransaction |
setPrimaryNavigationFragment(fragment: Fragment?)Set a currently active fragment in this FragmentManager as the primary navigation fragment. |
FragmentTransaction |
setReorderingAllowed(reorderingAllowed: Boolean)Sets whether or not to allow optimizing operations within and across transactions. |
FragmentTransaction |
setTransition(transition: Int)Select a standard transition animation for this transaction. |
FragmentTransaction |
This function is deprecated. The desired functionality never worked correctly. |
FragmentTransaction |
Shows a previously hidden fragment. |
Extension functions |
|
|---|---|
inline FragmentTransaction |
<F : Fragment> FragmentTransaction.add(tag: String, args: Bundle?)Add a fragment to the associated |
inline FragmentTransaction |
Add a fragment to the associated |
inline FragmentTransaction |
<F : Fragment> FragmentTransaction.replace(Replace an existing fragment that was added to a container. |
Constants
TRANSIT_ENTER_MASK
const val TRANSIT_ENTER_MASK = 4096: Int
Bit mask that is set for all enter transitions.
TRANSIT_EXIT_MASK
const val TRANSIT_EXIT_MASK = 8192: Int
Bit mask that is set for all exit transitions.
TRANSIT_FRAGMENT_CLOSE
const val TRANSIT_FRAGMENT_CLOSE = 8194: Int
Fragment is being removed from the stack
TRANSIT_FRAGMENT_FADE
const val TRANSIT_FRAGMENT_FADE = 4099: 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.
TRANSIT_FRAGMENT_MATCH_ACTIVITY_CLOSE
const val TRANSIT_FRAGMENT_MATCH_ACTIVITY_CLOSE = 8197: Int
Fragment is being removed from the stack with Activity close transition.
TRANSIT_FRAGMENT_MATCH_ACTIVITY_OPEN
const val TRANSIT_FRAGMENT_MATCH_ACTIVITY_OPEN = 4100: Int
Fragment is being added onto the stack with Activity open transition.
TRANSIT_FRAGMENT_OPEN
const val TRANSIT_FRAGMENT_OPEN = 4097: Int
Fragment is being added onto the stack
Public constructors
Public functions
add
fun add(containerViewId: @IdRes Int, fragment: Fragment): FragmentTransaction
Calls add with a null tag.
add
fun add(fragment: Fragment, tag: String?): FragmentTransaction
Calls add with a 0 containerViewId.
add
fun add(container: ViewGroup, fragment: Fragment, tag: String?): FragmentTransaction
Add a fragment to the activity state. This fragment may optionally also have its view (if Fragment.onCreateView returns non-null) into a container view of the activity.
| Parameters | |
|---|---|
container: ViewGroup |
The container this fragment is to be placed in. The id of the container should be non-zero and unique. |
fragment: Fragment |
The fragment to be added. This fragment must not already be added to the activity. |
tag: String? |
Optional tag name for the fragment, to later retrieve the fragment with |
| Returns | |
|---|---|
FragmentTransaction |
Returns the same FragmentTransaction instance. |
add
fun add(
containerViewId: @IdRes Int,
fragmentClass: Class<Fragment!>,
args: Bundle?
): FragmentTransaction
Calls add with a null tag.
add
fun add(containerViewId: @IdRes Int, fragment: Fragment, tag: String?): FragmentTransaction
Add a fragment to the activity state. This fragment may optionally also have its view (if Fragment.onCreateView returns non-null) into a container view of the activity.
| Parameters | |
|---|---|
containerViewId: @IdRes Int |
Optional identifier of the container this fragment is to be placed in. If 0, it will not be placed in a container. |
fragment: Fragment |
The fragment to be added. This fragment must not already be added to the activity. |
tag: String? |
Optional tag name for the fragment, to later retrieve the fragment with |
| Returns | |
|---|---|
FragmentTransaction |
Returns the same FragmentTransaction instance. |
add
fun add(fragmentClass: Class<Fragment!>, args: Bundle?, tag: String?): FragmentTransaction
Calls add with a 0 containerViewId.
add
fun add(
containerViewId: @IdRes Int,
fragmentClass: Class<Fragment!>,
args: Bundle?,
tag: String?
): FragmentTransaction
Add a fragment to the activity state. This fragment may optionally also have its view (if Fragment.onCreateView returns non-null) into a container view of the activity.
| Parameters | |
|---|---|
containerViewId: @IdRes Int |
Optional identifier of the container this fragment is to be placed in. If 0, it will not be placed in a container. |
fragmentClass: Class<Fragment!> |
The fragment to be added, created via the |
args: Bundle? |
Optional arguments to be set on the fragment. |
tag: String? |
Optional tag name for the fragment, to later retrieve the fragment with |
| Returns | |
|---|---|
FragmentTransaction |
Returns the same FragmentTransaction instance. |
addSharedElement
fun addSharedElement(sharedElement: View, name: String): FragmentTransaction
Used with custom Transitions to map a View from a removed or hidden Fragment to a View from a shown or added Fragment. sharedElement must have a unique transitionName in the View hierarchy.
addToBackStack
fun addToBackStack(name: String?): FragmentTransaction
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 must be set to true in the same transaction as addToBackStack() to allow the pop of that transaction to be reordered.
| Parameters | |
|---|---|
name: String? |
An optional name for this back stack state, or null. |
attach
fun attach(fragment: Fragment): FragmentTransaction
Re-attach a fragment after it had previously been detached from the UI with detach. This causes its view hierarchy to be re-created, attached to the UI, and displayed.
| Parameters | |
|---|---|
fragment: Fragment |
The fragment to be attached. |
| Returns | |
|---|---|
FragmentTransaction |
Returns the same FragmentTransaction instance. |
commit
abstract fun commit(): Int
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 | |
|---|---|
Int |
Returns the identifier of this transaction's back stack entry, if |
commitAllowingStateLoss
abstract fun commitAllowingStateLoss(): Int
Like commit 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
@MainThread
abstract fun commitNow(): Unit
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 calling commit followed by 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 with addToBackStack.
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
@MainThread
abstract fun commitNowAllowingStateLoss(): Unit
Like commitNow 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.
detach
fun detach(fragment: Fragment): FragmentTransaction
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: Fragment |
The fragment to be detached. |
| Returns | |
|---|---|
FragmentTransaction |
Returns the same FragmentTransaction instance. |
disallowAddToBackStack
fun disallowAddToBackStack(): FragmentTransaction
Disallow calls to addToBackStack. Any future calls to addToBackStack will throw IllegalStateException. If addToBackStack has already been called, this method will throw IllegalStateException.
hide
fun hide(fragment: Fragment): FragmentTransaction
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: Fragment |
The fragment to be hidden. |
| Returns | |
|---|---|
FragmentTransaction |
Returns the same FragmentTransaction instance. |
isAddToBackStackAllowed
fun isAddToBackStackAllowed(): Boolean
Returns true if this FragmentTransaction is allowed to be added to the back stack. If this method would return false, addToBackStack will throw IllegalStateException.
| Returns | |
|---|---|
Boolean |
True if |
isEmpty
fun isEmpty(): Boolean
| Returns | |
|---|---|
Boolean |
|
remove
fun remove(fragment: Fragment): FragmentTransaction
Remove an existing fragment. If it was added to a container, its view is also removed from that container.
| Parameters | |
|---|---|
fragment: Fragment |
The fragment to be removed. |
| Returns | |
|---|---|
FragmentTransaction |
Returns the same FragmentTransaction instance. |
replace
fun replace(containerViewId: @IdRes Int, fragment: Fragment): FragmentTransaction
Calls replace with a null tag.
replace
fun replace(
containerViewId: @IdRes Int,
fragmentClass: Class<Fragment!>,
args: Bundle?
): FragmentTransaction
Calls replace with a null tag.
replace
fun replace(containerViewId: @IdRes Int, fragment: Fragment, tag: String?): FragmentTransaction
Replace an existing fragment that was added to a container. This is essentially the same as calling remove for all currently added fragments that were added with the same containerViewId and then add with the same arguments given here.
| Parameters | |
|---|---|
containerViewId: @IdRes Int |
Identifier of the container whose fragment(s) are to be replaced. |
fragment: Fragment |
The new fragment to place in the container. |
tag: String? |
Optional tag name for the fragment, to later retrieve the fragment with |
| Returns | |
|---|---|
FragmentTransaction |
Returns the same FragmentTransaction instance. |
replace
fun replace(
containerViewId: @IdRes Int,
fragmentClass: Class<Fragment!>,
args: Bundle?,
tag: String?
): FragmentTransaction
Replace an existing fragment that was added to a container. This is essentially the same as calling remove for all currently added fragments that were added with the same containerViewId and then add with the same arguments given here.
| Parameters | |
|---|---|
containerViewId: @IdRes Int |
Identifier of the container whose fragment(s) are to be replaced. |
fragmentClass: Class<Fragment!> |
The new fragment to place in the container, created via the |
args: Bundle? |
Optional arguments to be set on the fragment. |
tag: String? |
Optional tag name for the fragment, to later retrieve the fragment with |
| Returns | |
|---|---|
FragmentTransaction |
Returns the same FragmentTransaction instance. |
runOnCommit
fun runOnCommit(runnable: Runnable): FragmentTransaction
Add a Runnable to this transaction that will be run after this transaction has been committed. If fragment transactions are optimized 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 transactions added to the back stack as Runnables cannot be persisted with back stack state. IllegalStateException will be thrown if addToBackStack has been previously called for this transaction or if it is called after a call to runOnCommit.
| Parameters | |
|---|---|
runnable: Runnable |
Runnable to add |
| Returns | |
|---|---|
FragmentTransaction |
this FragmentTransaction |
| Throws | |
|---|---|
java.lang.IllegalStateException |
if |
funsetBreadCrumbShortTitle(res: @StringRes Int): FragmentTransaction
Set the short title to show as a bread crumb when this transaction is on the back stack.
funsetBreadCrumbShortTitle(text: CharSequence?): FragmentTransaction
Like setBreadCrumbShortTitle but taking a raw string; this method is not recommended, as the string can not be changed later if the locale changes.
funsetBreadCrumbTitle(res: @StringRes Int): FragmentTransaction
Set the full title to show as a bread crumb when this transaction is on the back stack.
funsetBreadCrumbTitle(text: CharSequence?): FragmentTransaction
Like setBreadCrumbTitle but taking a raw string; this method is not recommended, as the string can not be changed later if the locale changes.
setCustomAnimations
fun setCustomAnimations(
enter: @AnimatorRes @AnimRes Int,
exit: @AnimatorRes @AnimRes Int
): FragmentTransaction
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: @AnimatorRes @AnimRes Int |
An animation or animator resource ID used for the enter animation on the view of the fragment being added or attached. |
exit: @AnimatorRes @AnimRes Int |
An animation or animator resource ID used for the exit animation on the view of the fragment being removed or detached. |
setCustomAnimations
fun setCustomAnimations(
enter: @AnimatorRes @AnimRes Int,
exit: @AnimatorRes @AnimRes Int,
popEnter: @AnimatorRes @AnimRes Int,
popExit: @AnimatorRes @AnimRes Int
): FragmentTransaction
Set specific animation resources to run for the fragments that are entering and exiting in this transaction. The popEnter and popExit 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: @AnimatorRes @AnimRes Int |
An animation or animator resource ID used for the enter animation on the view of the fragment being added or attached. |
exit: @AnimatorRes @AnimRes Int |
An animation or animator resource ID used for the exit animation on the view of the fragment being removed or detached. |
popEnter: @AnimatorRes @AnimRes Int |
An animation or animator resource ID used for the enter animation on the view of the fragment being readded or reattached caused by |
popExit: @AnimatorRes @AnimRes Int |
An animation or animator resource ID used for the enter animation on the view of the fragment being removed or detached caused by |
setMaxLifecycle
fun setMaxLifecycle(fragment: Fragment, state: Lifecycle.State): FragmentTransaction
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 INITIALIZED is passed in as the Lifecycle.State and the provided fragment has already moved beyond INITIALIZED, an IllegalArgumentException will be thrown.
If the DESTROYED is passed in as the Lifecycle.State an IllegalArgumentException will be thrown.
| Parameters | |
|---|---|
fragment: Fragment |
the fragment to have it's state capped. |
state: Lifecycle.State |
the ceiling state for the fragment. |
| Returns | |
|---|---|
FragmentTransaction |
the same FragmentTransaction instance |
setPrimaryNavigationFragment
fun setPrimaryNavigationFragment(fragment: Fragment?): FragmentTransaction
Set a currently active fragment in this FragmentManager as the primary navigation fragment.
The primary navigation fragment's child FragmentManager will be called first to process delegated navigation actions such as popBackStack if no ID or transaction name is provided to pop to. Navigation operations outside of the fragment system may choose to delegate those actions to the primary navigation fragment as returned by getPrimaryNavigationFragment.
The fragment provided must currently be added to the FragmentManager to be set as a primary navigation fragment, or previously added as part of this transaction.
| Parameters | |
|---|---|
fragment: Fragment? |
the fragment to set as the primary navigation fragment |
| Returns | |
|---|---|
FragmentTransaction |
the same FragmentTransaction instance |
setReorderingAllowed
fun setReorderingAllowed(reorderingAllowed: Boolean): FragmentTransaction
Sets whether or not 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 onCreate called before replaced Fragments have onDestroy called.
postponeEnterTransition requires setReorderingAllowed(true).
The default is false.
| Parameters | |
|---|---|
reorderingAllowed: Boolean |
|
setTransition
fun setTransition(transition: Int): FragmentTransaction
Select a standard transition animation for this transaction. May be one of TRANSIT_NONE, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE, or TRANSIT_FRAGMENT_FADE.
funsetTransitionStyle(styleRes: @StyleRes Int): FragmentTransaction
Set a custom style resource that will be used for resolving transit animations.
show
fun show(fragment: Fragment): FragmentTransaction
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: Fragment |
The fragment to be shown. |
| Returns | |
|---|---|
FragmentTransaction |
Returns the same FragmentTransaction instance. |
Extension functions
add
inline fun <F : Fragment> FragmentTransaction.add(tag: String, args: Bundle? = null): FragmentTransaction
Add a fragment to the associated FragmentManager without adding the Fragment to any container view.
The new fragment to be added will be created via the FragmentFactory of the FragmentManager.
| Parameters | |
|---|---|
tag: String |
Tag name for the fragment, to later retrieve the fragment with |
args: Bundle? = null |
Optional arguments to be set on the fragment. |
| Returns | |
|---|---|
FragmentTransaction |
Returns the same |
add
inline fun <F : Fragment> FragmentTransaction.add(
containerViewId: @IdRes Int,
tag: String? = null,
args: Bundle? = null
): FragmentTransaction
Add a fragment to the associated FragmentManager, inflating the Fragment's view into the container view specified by containerViewId, to later retrieve via FragmentManager.findFragmentById.
The new fragment to be added will be created via the FragmentFactory of the FragmentManager.
| Parameters | |
|---|---|
containerViewId: @IdRes Int |
Identifier of the container this fragment is to be placed in. |
tag: String? = null |
Optional tag name for the fragment, to later retrieve the fragment with |
args: Bundle? = null |
Optional arguments to be set on the fragment. |
| Returns | |
|---|---|
FragmentTransaction |
Returns the same |
replace
inline fun <F : Fragment> FragmentTransaction.replace(
containerViewId: @IdRes Int,
tag: String? = null,
args: Bundle? = null
): FragmentTransaction
Replace an existing fragment that was added to a container. This is essentially the same as calling remove for all currently added fragments that were added with the same containerViewId and then add with the same arguments given here.
The new fragment to place in the container will be created via the FragmentFactory of the FragmentManager.
| Parameters | |
|---|---|
containerViewId: @IdRes Int |
Identifier of the container whose fragment(s) are to be replaced. |
tag: String? = null |
Optional tag name for the fragment, to later retrieve the fragment with |
args: Bundle? = null |
Optional arguments to be set on the fragment. |
| Returns | |
|---|---|
FragmentTransaction |
Returns the same |