blob: 62a9151e296f1d1dcf9977ef8491a11530519a9a [file] [log] [blame]
<html devsite="true">
<head>
<title>SavedStateHandle</title>
{% setvar book_path %}/reference/androidx/_book.yaml{% endsetvar %}
{% include "_shared/_reference-head-tags.html" %}
</head>
<body>
<div id="metadata-info-block">
<div id="source-link"><a href="https://cs.android.com/search?q=file:-savedstate/androidx/lifecycle/SavedStateHandle.kt+class:androidx.lifecycle.SavedStateHandle&amp;ss=androidx/platform/frameworks/support" class="external">View Source</a></div>
</div>
<h1>SavedStateHandle</h1>
<p>
<pre>public final class <a href="/reference/androidx/lifecycle/SavedStateHandle.html">SavedStateHandle</a></pre>
</p>
<hr>
<p>A handle to saved state passed down to <code><a href="/reference/androidx/lifecycle/ViewModel.html">androidx.lifecycle.ViewModel</a></code>. You should use <code><a href="/reference/androidx/lifecycle/SavedStateViewModelFactory.html">SavedStateViewModelFactory</a></code> if you want to receive this object in <code>ViewModel</code>'s constructor.</p>
<p>This is a key-value map that will let you write and retrieve objects to and from the saved state. These values will persist after the process is killed by the system and remain available via the same object.</p>
<p>You can read a value from it via <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#get(kotlin.String)">get</a></code> or observe it via <code><a href="/reference/androidx/lifecycle/LiveData.html">androidx.lifecycle.LiveData</a></code> returned by <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#getLiveData(kotlin.String)">getLiveData</a></code>.</p>
<p>You can write a value to it via <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#set(kotlin.String,kotlin.Any)">set</a></code> or setting a value to <code><a href="/reference/androidx/lifecycle/MutableLiveData.html">androidx.lifecycle.MutableLiveData</a></code> returned by <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#getLiveData(kotlin.String)">getLiveData</a></code>.</p>
<h2>Summary</h2>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%"><h3>Nested types</h3></th>
</tr>
</thead>
<tbody class="list">
<tr>
<td>
<div><code>public static class <a href="/reference/androidx/lifecycle/SavedStateHandle.Companion.html">SavedStateHandle.Companion</a></code></div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%"><h3>Public constructors</h3></th>
</tr>
</thead>
<tbody class="list">
<tr>
<td>
<div><code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#SavedStateHandle()">SavedStateHandle</a>()</code></div>
<p>Creates a handle with the empty state.</p>
</td>
</tr>
<tr>
<td>
<div><code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#SavedStateHandle(kotlin.collections.Map)">SavedStateHandle</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/util/Map.html">Map</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>,&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt;&nbsp;initialState)</code></div>
<p>Creates a handle with the given initial arguments.</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%"><h3>Public methods</h3></th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code>final void</code></td>
<td>
<div><code>@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br><a href="/reference/androidx/lifecycle/SavedStateHandle.html#clearSavedStateProvider(kotlin.String)">clearSavedStateProvider</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key)</code></div>
<p>Clear any SavedStateProvider that was previously set via <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#setSavedStateProvider(kotlin.String,androidx.savedstate.SavedStateRegistry.SavedStateProvider)">setSavedStateProvider</a></code>.</p>
</td>
</tr>
<tr>
<td><code>final boolean</code></td>
<td>
<div><code>@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br><a href="/reference/androidx/lifecycle/SavedStateHandle.html#contains(kotlin.String)">contains</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key)</code></div>
</td>
</tr>
<tr>
<td><code>final T</code></td>
<td>
<div><code>@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>&lt;T&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/lifecycle/SavedStateHandle.html#get(kotlin.String)">get</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key)</code></div>
<p>Returns a value associated with the given key.</p>
</td>
</tr>
<tr>
<td><code>final @<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/lifecycle/MutableLiveData.html">MutableLiveData</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> T&gt;</code></td>
<td>
<div><code>@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>&lt;T&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/lifecycle/SavedStateHandle.html#getLiveData(kotlin.String)">getLiveData</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key)</code></div>
<p>Returns a <code><a href="/reference/androidx/lifecycle/LiveData.html">androidx.lifecycle.LiveData</a></code> that access data associated with the given key.</p>
</td>
</tr>
<tr>
<td><code>final @<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/lifecycle/MutableLiveData.html">MutableLiveData</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> T&gt;</code></td>
<td>
<div><code>@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>&lt;T&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/lifecycle/SavedStateHandle.html#getLiveData(kotlin.String,kotlin.Any)">getLiveData</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key,&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> T&nbsp;initialValue)</code></div>
<p>Returns a <code><a href="/reference/androidx/lifecycle/LiveData.html">androidx.lifecycle.LiveData</a></code> that access data associated with the given key.</p>
</td>
</tr>
<tr>
<td><code>final @<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-state-flow/index.html">StateFlow</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> T&gt;</code></td>
<td>
<div><code>@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>&lt;T&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/lifecycle/SavedStateHandle.html#getStateFlow(kotlin.String,kotlin.Any)">getStateFlow</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key,&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> T&nbsp;initialValue)</code></div>
<p>Returns a <code><a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-state-flow/index.html">StateFlow</a></code> that will emit the currently active value associated with the given key.</p>
</td>
</tr>
<tr>
<td><code>final @<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/util/Set.html">Set</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&gt;</code></td>
<td>
<div><code>@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br><a href="/reference/androidx/lifecycle/SavedStateHandle.html#keys()">keys</a>()</code></div>
<p>Returns all keys contained in this <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html">SavedStateHandle</a></code></p>
</td>
</tr>
<tr>
<td><code>final T</code></td>
<td>
<div><code>@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>&lt;T&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/lifecycle/SavedStateHandle.html#remove(kotlin.String)">remove</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key)</code></div>
<p>Removes a value associated with the given key.</p>
</td>
</tr>
<tr>
<td><code>final void</code></td>
<td>
<div><code>@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>&lt;T&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/lifecycle/SavedStateHandle.html#set(kotlin.String,kotlin.Any)">set</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key,&nbsp;T&nbsp;value)</code></div>
<p>Associate the given value with the key.</p>
</td>
</tr>
<tr>
<td><code>final void</code></td>
<td>
<div><code>@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br><a href="/reference/androidx/lifecycle/SavedStateHandle.html#setSavedStateProvider(kotlin.String,androidx.savedstate.SavedStateRegistry.SavedStateProvider)">setSavedStateProvider</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key,<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/savedstate/SavedStateRegistry.SavedStateProvider.html">SavedStateRegistry.SavedStateProvider</a>&nbsp;provider<br>)</code></div>
<p>Set a SavedStateProvider that will have its state saved into this SavedStateHandle.</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="list">
<h2>Public constructors</h2>
<div class="api-item"><a name="SavedStateHandle--"></a><a name="savedstatehandle"></a>
<h3 class="api-name" id="SavedStateHandle()">SavedStateHandle</h3>
<pre class="api-signature no-pretty-print">public&nbsp;<a href="/reference/androidx/lifecycle/SavedStateHandle.html#SavedStateHandle()">SavedStateHandle</a>()</pre>
<p>Creates a handle with the empty state.</p>
</div>
<div class="api-item"><a name="SavedStateHandle-kotlin.collections.Map-"></a><a name="savedstatehandle"></a>
<h3 class="api-name" id="SavedStateHandle(kotlin.collections.Map)">SavedStateHandle</h3>
<pre class="api-signature no-pretty-print">public&nbsp;<a href="/reference/androidx/lifecycle/SavedStateHandle.html#SavedStateHandle(kotlin.collections.Map)">SavedStateHandle</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/util/Map.html">Map</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>,&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt;&nbsp;initialState)</pre>
<p>Creates a handle with the given initial arguments.</p>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%">Parameters</th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code>@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/util/Map.html">Map</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>,&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt;&nbsp;initialState</code></td>
<td>
<p>initial arguments for the SavedStateHandle</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="list">
<h2>Public methods</h2>
<div class="api-item"><a name="clearSavedStateProvider-kotlin.String-"></a><a name="clearsavedstateprovider"></a>
<h3 class="api-name" id="clearSavedStateProvider(kotlin.String)">clearSavedStateProvider</h3>
<pre class="api-signature no-pretty-print">@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>public&nbsp;final&nbsp;void&nbsp;<a href="/reference/androidx/lifecycle/SavedStateHandle.html#clearSavedStateProvider(kotlin.String)">clearSavedStateProvider</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key)</pre>
<p>Clear any SavedStateProvider that was previously set via <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#setSavedStateProvider(kotlin.String,androidx.savedstate.SavedStateRegistry.SavedStateProvider)">setSavedStateProvider</a></code>.</p>
<p>Note: calling this method within SavedStateProvider.saveState is supported, but will only affect future state saving operations.</p>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%">Parameters</th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code>@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key</code></td>
<td>
<p>a key previously used with <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#setSavedStateProvider(kotlin.String,androidx.savedstate.SavedStateRegistry.SavedStateProvider)">setSavedStateProvider</a></code></p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="api-item"><a name="contains-kotlin.String-"></a><a name="contains"></a>
<h3 class="api-name" id="contains(kotlin.String)">contains</h3>
<pre class="api-signature no-pretty-print">@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>public&nbsp;final&nbsp;boolean&nbsp;<a href="/reference/androidx/lifecycle/SavedStateHandle.html#contains(kotlin.String)">contains</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key)</pre>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%">Parameters</th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code>@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key</code></td>
<td>
<p>The identifier for the value</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%">Returns</th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code>boolean</code></td>
<td>
<p>true if there is value associated with the given key.</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="api-item"><a name="get-kotlin.String-"></a><a name="get"></a>
<h3 class="api-name" id="get(kotlin.String)">get</h3>
<pre class="api-signature no-pretty-print">@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>public&nbsp;final&nbsp;T&nbsp;&lt;T&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/lifecycle/SavedStateHandle.html#get(kotlin.String)">get</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key)</pre>
<p>Returns a value associated with the given key.</p>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%">Parameters</th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code>@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key</code></td>
<td>
<p>a key used to retrieve a value.</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="api-item"><a name="getLiveData-kotlin.String-"></a><a name="getlivedata"></a>
<h3 class="api-name" id="getLiveData(kotlin.String)">getLiveData</h3>
<pre class="api-signature no-pretty-print">@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>public&nbsp;final&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/lifecycle/MutableLiveData.html">MutableLiveData</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> T&gt;&nbsp;&lt;T&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/lifecycle/SavedStateHandle.html#getLiveData(kotlin.String)">getLiveData</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key)</pre>
<p>Returns a <code><a href="/reference/androidx/lifecycle/LiveData.html">androidx.lifecycle.LiveData</a></code> that access data associated with the given key.</p>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%">Parameters</th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code>@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key</code></td>
<td>
<p>The identifier for the value</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%">See also</th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#getLiveData(kotlin.String)">getLiveData</a></code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="api-item"><a name="getLiveData(kotlin.String, kotlin.Any)"></a><a name="getLiveData-kotlin.String-kotlin.Any-"></a><a name="getlivedata"></a>
<h3 class="api-name" id="getLiveData(kotlin.String,kotlin.Any)">getLiveData</h3>
<pre class="api-signature no-pretty-print">@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>public&nbsp;final&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/lifecycle/MutableLiveData.html">MutableLiveData</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> T&gt;&nbsp;&lt;T&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/lifecycle/SavedStateHandle.html#getLiveData(kotlin.String,kotlin.Any)">getLiveData</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key,&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> T&nbsp;initialValue)</pre>
<p>Returns a <code><a href="/reference/androidx/lifecycle/LiveData.html">androidx.lifecycle.LiveData</a></code> that access data associated with the given key.</p>
<pre class="prettyprint">`LiveData&lt;String&gt; liveData = savedStateHandle.get(KEY, &quot;defaultValue&quot;);`</pre>
<p>Keep in mind that <code><a href="/reference/androidx/lifecycle/LiveData.html">LiveData</a></code> can have <code>null</code> as a valid value. If the <code>initialValue</code> is <code>null</code> and the data does not already exist in the <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html">SavedStateHandle</a></code>, the value of the returned <code><a href="/reference/androidx/lifecycle/LiveData.html">LiveData</a></code> will be set to <code>null</code> and observers will be notified. You can call <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#getLiveData(kotlin.String)">getLiveData</a></code> if you want to avoid dispatching <code>null</code> to observers.</p>
<pre class="prettyprint">`String defaultValue = ...; // nullable<br>LiveData&lt;String&gt; liveData;<br>if (defaultValue != null) {<br> liveData = savedStateHandle.getLiveData(KEY, defaultValue);<br>} else {<br> liveData = savedStateHandle.getLiveData(KEY);<br>}`</pre>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%">Parameters</th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code>@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key</code></td>
<td>
<p>The identifier for the value</p>
</td>
</tr>
<tr>
<td><code>@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> T&nbsp;initialValue</code></td>
<td>
<p>If no value exists with the given <code>key</code>, a new one is created with the given <code>initialValue</code>. Note that passing <code>null</code> will create a <code><a href="/reference/androidx/lifecycle/LiveData.html">LiveData</a></code> with <code>null</code> value.</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="api-item"><a name="getStateFlow(kotlin.String, kotlin.Any)"></a><a name="getStateFlow-kotlin.String-kotlin.Any-"></a><a name="getstateflow"></a>
<h3 class="api-name" id="getStateFlow(kotlin.String,kotlin.Any)">getStateFlow</h3>
<pre class="api-signature no-pretty-print">@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>public&nbsp;final&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-state-flow/index.html">StateFlow</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> T&gt;&nbsp;&lt;T&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/lifecycle/SavedStateHandle.html#getStateFlow(kotlin.String,kotlin.Any)">getStateFlow</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key,&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> T&nbsp;initialValue)</pre>
<p>Returns a <code><a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-state-flow/index.html">StateFlow</a></code> that will emit the currently active value associated with the given key.</p>
<pre class="prettyprint">val flow = savedStateHandle.getStateFlow(KEY, &quot;defaultValue&quot;)</pre>
<p>Since this is a <code><a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-state-flow/index.html">StateFlow</a></code> there will always be a value available which, is why an initial value must be provided. The value of this flow is changed by making a call to <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#set(kotlin.String,kotlin.Any)">set</a></code>, passing in the key that references this flow.</p>
<p>If there is already a value associated with the given key, the initial value will be ignored.</p>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%">Parameters</th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code>@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key</code></td>
<td>
<p>The identifier for the flow</p>
</td>
</tr>
<tr>
<td><code>@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> T&nbsp;initialValue</code></td>
<td>
<p>If no value exists with the given <code>key</code>, a new one is created with the given <code>initialValue</code>.</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="api-item"><a name="keys--"></a><a name="keys"></a>
<h3 class="api-name" id="keys()">keys</h3>
<pre class="api-signature no-pretty-print">@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>public&nbsp;final&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/util/Set.html">Set</a>&lt;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&gt;&nbsp;<a href="/reference/androidx/lifecycle/SavedStateHandle.html#keys()">keys</a>()</pre>
<p>Returns all keys contained in this <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html">SavedStateHandle</a></code></p>
<p>Returned set contains all keys: keys used to get LiveData-s, to set SavedStateProviders and keys used in regular <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#set(kotlin.String,kotlin.Any)">set</a></code>.</p>
</div>
<div class="api-item"><a name="remove-kotlin.String-"></a><a name="remove"></a>
<h3 class="api-name" id="remove(kotlin.String)">remove</h3>
<pre class="api-signature no-pretty-print">@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>public&nbsp;final&nbsp;T&nbsp;&lt;T&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/lifecycle/SavedStateHandle.html#remove(kotlin.String)">remove</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key)</pre>
<p>Removes a value associated with the given key. If there is a <code><a href="/reference/androidx/lifecycle/LiveData.html">LiveData</a></code> and/or <code><a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-state-flow/index.html">StateFlow</a></code> associated with the given key, they will be removed as well.</p>
<p>All changes to <code><a href="/reference/androidx/lifecycle/LiveData.html">androidx.lifecycle.LiveData</a></code>s or <code><a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-state-flow/index.html">StateFlow</a></code>s previously returned by <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#getLiveData(kotlin.String)">SavedStateHandle.getLiveData</a></code> or <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#getStateFlow(kotlin.String,kotlin.Any)">getStateFlow</a></code> won't be reflected in the saved state. Also that <code>LiveData</code> or <code>StateFlow</code> won't receive any updates about new values associated by the given key.</p>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%">Parameters</th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code>@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key</code></td>
<td>
<p>a key</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%">Returns</th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code>T</code></td>
<td>
<p>a value that was previously associated with the given key.</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="api-item"><a name="set(kotlin.String, kotlin.Any)"></a><a name="set-kotlin.String-kotlin.Any-"></a><a name="set"></a>
<h3 class="api-name" id="set(kotlin.String,kotlin.Any)">set</h3>
<pre class="api-signature no-pretty-print">@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>public&nbsp;final&nbsp;void&nbsp;&lt;T&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/java/lang/Object.html">Object</a>&gt; <a href="/reference/androidx/lifecycle/SavedStateHandle.html#set(kotlin.String,kotlin.Any)">set</a>(@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key,&nbsp;T&nbsp;value)</pre>
<p>Associate the given value with the key. The value must have a type that could be stored in <code><a href="https://developer.android.com/reference/android/os/Bundle.html">android.os.Bundle</a></code></p>
<p>This also sets values for any active <code><a href="/reference/androidx/lifecycle/LiveData.html">LiveData</a></code>s or Flows.</p>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%">Parameters</th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code>@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key</code></td>
<td>
<p>a key used to associate with the given value.</p>
</td>
</tr>
<tr>
<td><code>T&nbsp;value</code></td>
<td>
<p>object of any type that can be accepted by Bundle.</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%">Throws</th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-illegal-argument-exception/index.html">kotlin.IllegalArgumentException</a>&nbsp;kotlin.IllegalArgumentException</code></td>
<td>
<p>value cannot be saved in saved state</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="api-item"><a name="setSavedStateProvider(kotlin.String, androidx.savedstate.SavedStateRegistry.SavedStateProvider)"></a><a name="setSavedStateProvider-kotlin.String-androidx.savedstate.SavedStateRegistry.SavedStateProvider-"></a><a name="setsavedstateprovider"></a>
<h3 class="api-name" id="setSavedStateProvider(kotlin.String,androidx.savedstate.SavedStateRegistry.SavedStateProvider)">setSavedStateProvider</h3>
<pre class="api-signature no-pretty-print">@<a href="/reference/androidx/annotation/MainThread.html">MainThread</a><br>public&nbsp;final&nbsp;void&nbsp;<a href="/reference/androidx/lifecycle/SavedStateHandle.html#setSavedStateProvider(kotlin.String,androidx.savedstate.SavedStateRegistry.SavedStateProvider)">setSavedStateProvider</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key,<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/savedstate/SavedStateRegistry.SavedStateProvider.html">SavedStateRegistry.SavedStateProvider</a>&nbsp;provider<br>)</pre>
<p>Set a SavedStateProvider that will have its state saved into this SavedStateHandle. This provides a mechanism to lazily provide the <code><a href="https://developer.android.com/reference/android/os/Bundle.html">Bundle</a></code> of saved state for the given key.</p>
<p>Calls to <code><a href="/reference/androidx/lifecycle/SavedStateHandle.html#get(kotlin.String)">get</a></code> with this same key will return the previously saved state as a <code><a href="https://developer.android.com/reference/android/os/Bundle.html">Bundle</a></code> if it exists.</p>
<pre class="prettyprint">Bundle previousState = savedStateHandle.get(&quot;custom_object&quot;);<br>if (previousState != null) {<br> // Convert the previousState into your custom object<br>}<br>savedStateHandle.setSavedStateProvider(&quot;custom_object&quot;, () -&gt; {<br> Bundle savedState = new Bundle();<br> // Put your custom object into the Bundle, doing any conversion required<br> return savedState;<br>});</pre>
<p>Note: calling this method within SavedStateProvider.saveState is supported, but will only affect future state saving operations.</p>
<div class="devsite-table-wrapper">
<table class="responsive">
<colgroup>
<col width="40%">
<col>
</colgroup>
<thead>
<tr>
<th colspan="100%">Parameters</th>
</tr>
</thead>
<tbody class="list">
<tr>
<td><code>@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/java/lang/String.html">String</a>&nbsp;key</code></td>
<td>
<p>a key which will populated with a <code><a href="https://developer.android.com/reference/android/os/Bundle.html">Bundle</a></code> produced by the provider</p>
</td>
</tr>
<tr>
<td><code>@<a href="/reference/androidx/annotation/NonNull.html">NonNull</a> <a href="/reference/androidx/savedstate/SavedStateRegistry.SavedStateProvider.html">SavedStateRegistry.SavedStateProvider</a>&nbsp;provider</code></td>
<td>
<p>a SavedStateProvider which will receive a callback to SavedStateProvider.saveState when the state should be saved</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>