Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 1 | <html devsite="true"> |
| 2 | <head> |
| 3 | <title>PagingSource</title> |
| 4 | {% setvar book_path %}/reference/kotlin/androidx/_book.yaml{% endsetvar %} |
| 5 | {% include "_shared/_reference-head-tags.html" %} |
| 6 | </head> |
| 7 | <body> |
Tiem Song | 6f896de | 2022-11-03 14:55:52 -0700 | [diff] [blame^] | 8 | <div id="metadata-info-block"></div> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 9 | <h1>PagingSource</h1> |
Andrea Falcone | 4be8b87 | 2020-10-15 12:34:30 -0400 | [diff] [blame] | 10 | <p> |
Owen Gray | 22f2057 | 2022-08-08 13:48:02 -0400 | [diff] [blame] | 11 | <pre>abstract class <a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a><Key : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, Value : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>></pre> |
Andrea Falcone | 4be8b87 | 2020-10-15 12:34:30 -0400 | [diff] [blame] | 12 | </p> |
Alex Saveau | 20bf066 | 2020-09-23 03:45:51 +0000 | [diff] [blame] | 13 | <div class="devsite-table-wrapper"><devsite-expandable><span class="expand-control jd-sumtable-subclasses">Known direct subclasses |
| 14 | <div class="showalways" id="subclasses-direct"><a href="/reference/kotlin/androidx/paging/ListenableFuturePagingSource.html">ListenableFuturePagingSource</a>, <a href="/reference/kotlin/androidx/paging/rxjava2/RxPagingSource.html">RxPagingSource</a>, <a href="/reference/kotlin/androidx/paging/rxjava3/RxPagingSource.html">RxPagingSource</a></div> |
| 15 | </span> |
| 16 | <div id="subclasses-direct-summary"> |
| 17 | <div class="devsite-table-wrapper"> |
| 18 | <table class="responsive"> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 19 | <tbody class="list"> |
Alex Saveau | 20bf066 | 2020-09-23 03:45:51 +0000 | [diff] [blame] | 20 | <tr> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 21 | <td width="40%"><code><a href="/reference/kotlin/androidx/paging/ListenableFuturePagingSource.html">ListenableFuturePagingSource</a></code></td> |
| 22 | <td> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 23 | <p><code><a href="https://guava.dev/releases/18.0/api/docs/package-list/com/google/common/util/concurrent/ListenableFuture.html">ListenableFuture</a></code>-based compatibility wrapper around <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code>'s suspending APIs.</p> |
Alex Saveau | 20bf066 | 2020-09-23 03:45:51 +0000 | [diff] [blame] | 24 | </td> |
| 25 | </tr> |
| 26 | <tr> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 27 | <td width="40%"><code><a href="/reference/kotlin/androidx/paging/rxjava2/RxPagingSource.html">RxPagingSource</a></code></td> |
| 28 | <td> |
Alex Saveau | 20bf066 | 2020-09-23 03:45:51 +0000 | [diff] [blame] | 29 | <p>Rx-based compatibility wrapper around <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code>'s suspending APIs.</p> |
| 30 | </td> |
| 31 | </tr> |
| 32 | <tr> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 33 | <td width="40%"><code><a href="/reference/kotlin/androidx/paging/rxjava3/RxPagingSource.html">RxPagingSource</a></code></td> |
| 34 | <td> |
Alex Saveau | 20bf066 | 2020-09-23 03:45:51 +0000 | [diff] [blame] | 35 | <p>Rx-based compatibility wrapper around <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code>'s suspending APIs.</p> |
| 36 | </td> |
| 37 | </tr> |
| 38 | </tbody> |
| 39 | </table> |
| 40 | </div> |
| 41 | </div> |
| 42 | </devsite-expandable> </div> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 43 | <hr> |
Alex Saveau | fe9fe47 | 2020-09-10 01:41:31 +0000 | [diff] [blame] | 44 | <p>Base class for an abstraction of pageable static data from some source, where loading pages of data is typically an expensive operation. Some examples of common <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code>s might be from network or from a database.</p> |
| 45 | <p>An instance of a <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> is used to load pages of data for an instance of <code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code>.</p> |
| 46 | <p>A <code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code> can grow as it loads more data, but the data loaded cannot be updated. If the underlying data set is modified, a new <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> / <code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code> pair must be created to represent an updated snapshot of the data.</p> |
| 47 | <h3> Loading Pages</h3> |
| 48 | <p><code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code> queries data from its <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> in response to loading hints generated as the user scrolls in a <code>RecyclerView</code>.</p> |
Alex Saveau | 7ffa75d | 2020-09-19 05:45:27 +0000 | [diff] [blame] | 49 | <p>To control how and when a <code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code> queries data from its <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code>, see <code><a href="/reference/kotlin/androidx/paging/PagingConfig.html">PagingConfig</a></code>, which defines behavior such as <code><a href="/reference/kotlin/androidx/paging/PagingConfig.html#pageSize()">PagingConfig.pageSize</a></code> and <code><a href="/reference/kotlin/androidx/paging/PagingConfig.html#prefetchDistance()">PagingConfig.prefetchDistance</a></code>.</p> |
Alex Saveau | fe9fe47 | 2020-09-10 01:41:31 +0000 | [diff] [blame] | 50 | <h3> Updating Data</h3> |
| 51 | <p>A <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> / <code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code> pair is a snapshot of the data set. A new <code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code> / <code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code> must be created if an update occurs, such as a reorder, insert, delete, or content update occurs. A <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> must detect that it cannot continue loading its snapshot (for instance, when Database query notices a table being invalidated), and call <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#invalidate()">invalidate</a></code>. Then a new <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> / <code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code> pair would be created to represent data from the new state of the database query.</p> |
| 52 | <h3> Presenting Data to UI</h3> |
| 53 | <p>To present data loaded by a <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> to a <code>RecyclerView</code>, create an instance of <code><a href="/reference/kotlin/androidx/paging/Pager.html">Pager</a></code>, which provides a stream of <code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code> that you may collect from and submit to a <code><a href="/reference/kotlin/androidx/paging/PagingDataAdapter.html">PagingDataAdapter</a></code>.</p> |
Owen Gray | eb25613 | 2021-01-27 13:49:50 -0500 | [diff] [blame] | 54 | <pre class="prettyprint">/** |
Owen Gray | 327bd5c | 2021-03-23 10:21:18 -0400 | [diff] [blame] | 55 | * Sample page-keyed PagingSource, which uses Int page number to load pages. |
Owen Gray | eb25613 | 2021-01-27 13:49:50 -0500 | [diff] [blame] | 56 | * |
| 57 | * Loads Items from network requests via Retrofit to a backend service. |
| 58 | * |
| 59 | * Note that the key type is Int, since we're using page number to load a page. |
| 60 | */ |
| 61 | class MyPagingSource( |
| 62 | val myBackend: MyBackendService |
| 63 | ) : PagingSource<Int, Item>() { |
| 64 | override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Item> { |
| 65 | |
| 66 | // Retrofit calls that return the body type throw either IOException for network |
| 67 | // failures, or HttpException for any non-2xx HTTP status codes. This code reports all |
| 68 | // errors to the UI, but you can inspect/wrap the exceptions to provide more context. |
| 69 | return try { |
| 70 | // Key may be null during a refresh, if no explicit key is passed into Pager |
| 71 | // construction. Use 0 as default, because our API is indexed started at index 0 |
| 72 | val pageNumber = params.key ?: 0 |
| 73 | |
| 74 | // Suspending network load via Retrofit. This doesn't need to be wrapped in a |
| 75 | // withContext(Dispatcher.IO) { ... } block since Retrofit's Coroutine |
| 76 | // CallAdapter dispatches on a worker thread. |
| 77 | val response = myBackend.searchItems(pageNumber) |
| 78 | |
| 79 | // Since 0 is the lowest page number, return null to signify no more pages should |
| 80 | // be loaded before it. |
| 81 | val prevKey = if (pageNumber > 0) pageNumber - 1 else null |
| 82 | |
| 83 | // This API defines that it's out of data when a page returns empty. When out of |
| 84 | // data, we return `null` to signify no more pages should be loaded |
| 85 | val nextKey = if (response.items.isNotEmpty()) pageNumber + 1 else null |
| 86 | LoadResult.Page( |
| 87 | data = response.items, |
| 88 | prevKey = prevKey, |
| 89 | nextKey = nextKey |
| 90 | ) |
| 91 | } catch (e: IOException) { |
| 92 | LoadResult.Error(e) |
| 93 | } catch (e: HttpException) { |
| 94 | LoadResult.Error(e) |
| 95 | } |
| 96 | } |
| 97 | |
| 98 | override fun getRefreshKey(state: PagingState<Int, Item>): Int? { |
| 99 | return state.anchorPosition?.let { |
| 100 | state.closestPageToPosition(it)?.prevKey?.plus(1) |
| 101 | ?: state.closestPageToPosition(it)?.nextKey?.minus(1) |
| 102 | } |
| 103 | } |
| 104 | }</pre> |
Owen Gray | 327bd5c | 2021-03-23 10:21:18 -0400 | [diff] [blame] | 105 | <pre class="prettyprint">/** |
| 106 | * Sample item-keyed [PagingSource], which uses String tokens to load pages. |
| 107 | * |
| 108 | * Loads Items from network requests via Retrofit to a backend service. |
| 109 | */ |
| 110 | class MyPagingSource( |
| 111 | val myBackend: MyBackendService |
| 112 | ) : PagingSource<String, Item>() { |
| 113 | override suspend fun load(params: LoadParams<String>): LoadResult<String, Item> { |
| 114 | // Retrofit calls that return the body type throw either IOException for network |
| 115 | // failures, or HttpException for any non-2xx HTTP status codes. This code reports all |
| 116 | // errors to the UI, but you can inspect/wrap the exceptions to provide more context. |
| 117 | return try { |
| 118 | // Suspending network load via Retrofit. This doesn't need to be wrapped in a |
| 119 | // withContext(Dispatcher.IO) { ... } block since Retrofit's Coroutine |
| 120 | // CallAdapter dispatches on a worker thread. |
| 121 | val response = myBackend.searchItems(params.key) |
| 122 | LoadResult.Page( |
| 123 | data = response.items, |
| 124 | prevKey = response.prev, |
| 125 | nextKey = response.next |
| 126 | ) |
| 127 | } catch (e: IOException) { |
| 128 | LoadResult.Error(e) |
| 129 | } catch (e: HttpException) { |
| 130 | LoadResult.Error(e) |
| 131 | } |
| 132 | } |
| 133 | |
| 134 | override fun getRefreshKey(state: PagingState<String, Item>): String? { |
| 135 | return state.anchorPosition?.let { state.closestItemToPosition(it)?.id } |
| 136 | } |
| 137 | }</pre> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 138 | <div class="devsite-table-wrapper"> |
| 139 | <table class="responsive"> |
| 140 | <thead> |
| 141 | <tr> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 142 | <th colspan="100%">Parameters</th> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 143 | </tr> |
| 144 | </thead> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 145 | <tbody class="list"> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 146 | <tr> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 147 | <td width="40%"><code><Key : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 148 | <td> |
Andrea Falcone | 3adcc28 | 2020-12-04 09:31:29 -0500 | [diff] [blame] | 149 | <p>Type of key which define what data to load. E.g. <code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a></code> to represent either a page number or item position, or <code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></code> if your network uses Strings as next tokens returned with each response.</p> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 150 | </td> |
| 151 | </tr> |
| 152 | <tr> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 153 | <td width="40%"><code><Value : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 154 | <td> |
Alex Saveau | fe9fe47 | 2020-09-10 01:41:31 +0000 | [diff] [blame] | 155 | <p>Type of data loaded in by this <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code>. E.g., the type of data that will be passed to a <code><a href="/reference/kotlin/androidx/paging/PagingDataAdapter.html">PagingDataAdapter</a></code> to be displayed in a <code>RecyclerView</code>.</p> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 156 | </td> |
| 157 | </tr> |
| 158 | </tbody> |
| 159 | </table> |
| 160 | </div> |
| 161 | <div class="devsite-table-wrapper"> |
| 162 | <table class="responsive"> |
| 163 | <thead> |
| 164 | <tr> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 165 | <th colspan="100%">See also</th> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 166 | </tr> |
| 167 | </thead> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 168 | <tbody class="list"> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 169 | <tr> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 170 | <td width="40%"><code><a href="/reference/kotlin/androidx/paging/Pager.html">Pager</a></code></td> |
| 171 | <td></td> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 172 | </tr> |
| 173 | </tbody> |
| 174 | </table> |
| 175 | </div> |
| 176 | <h2>Summary</h2> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 177 | <div class="devsite-table-wrapper"> |
| 178 | <table class="responsive"> |
| 179 | <thead> |
| 180 | <tr> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 181 | <th colspan="100%"><h3>Nested types</h3></th> |
Alex Saveau | 6642845 | 2020-09-17 22:44:07 +0000 | [diff] [blame] | 182 | </tr> |
| 183 | </thead> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 184 | <tbody class="list"> |
Alex Saveau | 6642845 | 2020-09-17 22:44:07 +0000 | [diff] [blame] | 185 | <tr> |
Owen Gray | 22f2057 | 2022-08-08 13:48:02 -0400 | [diff] [blame] | 186 | <td width="40%"><code>sealed class <a href="/reference/kotlin/androidx/paging/PagingSource.LoadParams.html">PagingSource.LoadParams</a><Key : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 187 | <td> |
Alex Saveau | 3555c95 | 2020-09-18 03:05:17 +0000 | [diff] [blame] | 188 | <p>Params for a load request on a <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> from <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">PagingSource.load</a></code>.</p> |
Alex Saveau | 6642845 | 2020-09-17 22:44:07 +0000 | [diff] [blame] | 189 | </td> |
| 190 | </tr> |
| 191 | <tr> |
Owen Gray | 22f2057 | 2022-08-08 13:48:02 -0400 | [diff] [blame] | 192 | <td width="40%"><code>class <a href="/reference/kotlin/androidx/paging/PagingSource.LoadParams.Append.html">PagingSource.LoadParams.Append</a><Key : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>> : <a href="/reference/kotlin/androidx/paging/PagingSource.LoadParams.html">PagingSource.LoadParams</a></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 193 | <td> |
Alex Saveau | 3555c95 | 2020-09-18 03:05:17 +0000 | [diff] [blame] | 194 | <p>Params to load a page of data from a <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> via <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">PagingSource.load</a></code> to be appended to the end of the list.</p> |
Alex Saveau | 6642845 | 2020-09-17 22:44:07 +0000 | [diff] [blame] | 195 | </td> |
| 196 | </tr> |
| 197 | <tr> |
Owen Gray | 22f2057 | 2022-08-08 13:48:02 -0400 | [diff] [blame] | 198 | <td width="40%"><code>class <a href="/reference/kotlin/androidx/paging/PagingSource.LoadParams.Prepend.html">PagingSource.LoadParams.Prepend</a><Key : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>> : <a href="/reference/kotlin/androidx/paging/PagingSource.LoadParams.html">PagingSource.LoadParams</a></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 199 | <td> |
Alex Saveau | 3555c95 | 2020-09-18 03:05:17 +0000 | [diff] [blame] | 200 | <p>Params to load a page of data from a <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> via <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">PagingSource.load</a></code> to be prepended to the start of the list.</p> |
Alex Saveau | 6642845 | 2020-09-17 22:44:07 +0000 | [diff] [blame] | 201 | </td> |
| 202 | </tr> |
| 203 | <tr> |
Owen Gray | 22f2057 | 2022-08-08 13:48:02 -0400 | [diff] [blame] | 204 | <td width="40%"><code>class <a href="/reference/kotlin/androidx/paging/PagingSource.LoadParams.Refresh.html">PagingSource.LoadParams.Refresh</a><Key : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>> : <a href="/reference/kotlin/androidx/paging/PagingSource.LoadParams.html">PagingSource.LoadParams</a></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 205 | <td> |
Alex Saveau | 3555c95 | 2020-09-18 03:05:17 +0000 | [diff] [blame] | 206 | <p>Params for an initial load request on a <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> from <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">PagingSource.load</a></code> or a refresh triggered by <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#invalidate()">invalidate</a></code>.</p> |
Alex Saveau | 6642845 | 2020-09-17 22:44:07 +0000 | [diff] [blame] | 207 | </td> |
| 208 | </tr> |
| 209 | <tr> |
Owen Gray | 22f2057 | 2022-08-08 13:48:02 -0400 | [diff] [blame] | 210 | <td width="40%"><code>sealed class <a href="/reference/kotlin/androidx/paging/PagingSource.LoadResult.html">PagingSource.LoadResult</a><Key : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, Value : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 211 | <td> |
Alex Saveau | 3555c95 | 2020-09-18 03:05:17 +0000 | [diff] [blame] | 212 | <p>Result of a load request from <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">PagingSource.load</a></code>.</p> |
Alex Saveau | 6642845 | 2020-09-17 22:44:07 +0000 | [diff] [blame] | 213 | </td> |
| 214 | </tr> |
| 215 | <tr> |
Owen Gray | 22f2057 | 2022-08-08 13:48:02 -0400 | [diff] [blame] | 216 | <td width="40%"><code>data class <a href="/reference/kotlin/androidx/paging/PagingSource.LoadResult.Error.html">PagingSource.LoadResult.Error</a><Key : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, Value : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>> : <a href="/reference/kotlin/androidx/paging/PagingSource.LoadResult.html">PagingSource.LoadResult</a></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 217 | <td> |
Alex Saveau | 3555c95 | 2020-09-18 03:05:17 +0000 | [diff] [blame] | 218 | <p>Error result object for <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">PagingSource.load</a></code>.</p> |
Alex Saveau | 6642845 | 2020-09-17 22:44:07 +0000 | [diff] [blame] | 219 | </td> |
| 220 | </tr> |
| 221 | <tr> |
Owen Gray | 22f2057 | 2022-08-08 13:48:02 -0400 | [diff] [blame] | 222 | <td width="40%"><code>class <a href="/reference/kotlin/androidx/paging/PagingSource.LoadResult.Invalid.html">PagingSource.LoadResult.Invalid</a><Key : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, Value : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>> : <a href="/reference/kotlin/androidx/paging/PagingSource.LoadResult.html">PagingSource.LoadResult</a></code></td> |
Owen Gray | c2f8bde | 2022-04-25 13:17:41 -0400 | [diff] [blame] | 223 | <td> |
| 224 | <p>Invalid result object for <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">PagingSource.load</a></code></p> |
| 225 | </td> |
| 226 | </tr> |
| 227 | <tr> |
Owen Gray | 22f2057 | 2022-08-08 13:48:02 -0400 | [diff] [blame] | 228 | <td width="40%"><code>data class <a href="/reference/kotlin/androidx/paging/PagingSource.LoadResult.Page.html">PagingSource.LoadResult.Page</a><Key : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, Value : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>> : <a href="/reference/kotlin/androidx/paging/PagingSource.LoadResult.html">PagingSource.LoadResult</a></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 229 | <td> |
Alex Saveau | 3555c95 | 2020-09-18 03:05:17 +0000 | [diff] [blame] | 230 | <p>Success result object for <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">PagingSource.load</a></code>.</p> |
Alex Saveau | 6642845 | 2020-09-17 22:44:07 +0000 | [diff] [blame] | 231 | </td> |
| 232 | </tr> |
| 233 | <tr> |
Owen Gray | 22f2057 | 2022-08-08 13:48:02 -0400 | [diff] [blame] | 234 | <td width="40%"><code>object <a href="/reference/kotlin/androidx/paging/PagingSource.LoadResult.Page.Companion.html">PagingSource.LoadResult.Page.Companion</a></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 235 | <td></td> |
Alex Saveau | 6642845 | 2020-09-17 22:44:07 +0000 | [diff] [blame] | 236 | </tr> |
| 237 | </tbody> |
| 238 | </table> |
| 239 | </div> |
| 240 | <div class="devsite-table-wrapper"> |
| 241 | <table class="responsive"> |
| 242 | <thead> |
| 243 | <tr> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 244 | <th colspan="100%"><h3>Public constructors</h3></th> |
Alex Saveau | f393e9a | 2020-09-17 21:15:59 +0000 | [diff] [blame] | 245 | </tr> |
| 246 | </thead> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 247 | <tbody class="list"> |
Alex Saveau | f393e9a | 2020-09-17 21:15:59 +0000 | [diff] [blame] | 248 | <tr> |
| 249 | <td> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 250 | <div><code><Key : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, Value : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>> <a href="/reference/kotlin/androidx/paging/PagingSource.html#PagingSource()">PagingSource</a>()</code></div> |
Alex Saveau | f393e9a | 2020-09-17 21:15:59 +0000 | [diff] [blame] | 251 | </td> |
| 252 | </tr> |
| 253 | </tbody> |
| 254 | </table> |
| 255 | </div> |
| 256 | <div class="devsite-table-wrapper"> |
| 257 | <table class="responsive"> |
| 258 | <thead> |
| 259 | <tr> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 260 | <th colspan="100%"><h3>Public functions</h3></th> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 261 | </tr> |
| 262 | </thead> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 263 | <tbody class="list"> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 264 | <tr> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 265 | <td width="40%"><code>abstract Key?</code></td> |
| 266 | <td> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 267 | <div><code><a href="/reference/kotlin/androidx/paging/PagingSource.html#getRefreshKey(androidx.paging.PagingState)">getRefreshKey</a>(state: <a href="/reference/kotlin/androidx/paging/PagingState.html">PagingState</a><Key, Value>)</code></div> |
Owen Gray | 327bd5c | 2021-03-23 10:21:18 -0400 | [diff] [blame] | 268 | <p>Provide a <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">Key</a></code> used for the initial <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">load</a></code> for the next <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> due to invalidation of this <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code>.</p> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 269 | </td> |
| 270 | </tr> |
| 271 | <tr> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 272 | <td width="40%"><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a></code></td> |
| 273 | <td> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 274 | <div><code><a href="/reference/kotlin/androidx/paging/PagingSource.html#invalidate()">invalidate</a>()</code></div> |
Alex Saveau | fe9fe47 | 2020-09-10 01:41:31 +0000 | [diff] [blame] | 275 | <p>Signal the <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> to stop loading.</p> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 276 | </td> |
| 277 | </tr> |
| 278 | <tr> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 279 | <td width="40%"><code>abstract suspend <a href="/reference/kotlin/androidx/paging/PagingSource.LoadResult.html">PagingSource.LoadResult</a><Key, Value></code></td> |
| 280 | <td> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 281 | <div><code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">load</a>(params: <a href="/reference/kotlin/androidx/paging/PagingSource.LoadParams.html">PagingSource.LoadParams</a><Key>)</code></div> |
Alex Saveau | fe9fe47 | 2020-09-10 01:41:31 +0000 | [diff] [blame] | 282 | <p>Loading API for <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code>.</p> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 283 | </td> |
| 284 | </tr> |
| 285 | <tr> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 286 | <td width="40%"><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a></code></td> |
| 287 | <td> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 288 | <div><code><a href="/reference/kotlin/androidx/paging/PagingSource.html#registerInvalidatedCallback(kotlin.Function0)">registerInvalidatedCallback</a>(onInvalidatedCallback: () <span style="white-space: nowrap;">-></span> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>)</code></div> |
Alex Saveau | fe9fe47 | 2020-09-10 01:41:31 +0000 | [diff] [blame] | 289 | <p>Add a callback to invoke when the <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> is first invalidated.</p> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 290 | </td> |
| 291 | </tr> |
| 292 | <tr> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 293 | <td width="40%"><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a></code></td> |
| 294 | <td> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 295 | <div><code><a href="/reference/kotlin/androidx/paging/PagingSource.html#unregisterInvalidatedCallback(kotlin.Function0)">unregisterInvalidatedCallback</a>(onInvalidatedCallback: () <span style="white-space: nowrap;">-></span> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>)</code></div> |
Alex Saveau | fe9fe47 | 2020-09-10 01:41:31 +0000 | [diff] [blame] | 296 | <p>Remove a previously added invalidate callback.</p> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 297 | </td> |
| 298 | </tr> |
| 299 | </tbody> |
| 300 | </table> |
| 301 | </div> |
Fred Sladkey | 375e2ba | 2021-05-26 20:13:00 +0000 | [diff] [blame] | 302 | <div class="devsite-table-wrapper"> |
| 303 | <table class="responsive"> |
| 304 | <thead> |
| 305 | <tr> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 306 | <th colspan="100%"><h3>Public properties</h3></th> |
Fred Sladkey | 375e2ba | 2021-05-26 20:13:00 +0000 | [diff] [blame] | 307 | </tr> |
| 308 | </thead> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 309 | <tbody class="list"> |
Fred Sladkey | 375e2ba | 2021-05-26 20:13:00 +0000 | [diff] [blame] | 310 | <tr> |
| 311 | <td width="40%"><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a></code></td> |
| 312 | <td> |
| 313 | <div><code><a href="/reference/kotlin/androidx/paging/PagingSource.html#invalid()">invalid</a></code></div> |
| 314 | <p>Whether this <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> has been invalidated, which should happen when the data this <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> represents changes since it was first instantiated.</p> |
| 315 | </td> |
| 316 | </tr> |
| 317 | <tr> |
| 318 | <td width="40%"><code>open <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a></code></td> |
| 319 | <td> |
| 320 | <div><code><a href="/reference/kotlin/androidx/paging/PagingSource.html#jumpingSupported()">jumpingSupported</a></code></div> |
| 321 | <p><code>true</code> if this <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> supports jumping, <code>false</code> otherwise.</p> |
| 322 | </td> |
| 323 | </tr> |
| 324 | <tr> |
| 325 | <td width="40%"><code>open <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a></code></td> |
| 326 | <td> |
| 327 | <div><code><a href="/reference/kotlin/androidx/paging/PagingSource.html#keyReuseSupported()">keyReuseSupported</a></code></div> |
| 328 | <p><code>true</code> if this <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> expects to re-use keys to load distinct pages without a call to <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#invalidate()">invalidate</a></code>, <code>false</code> otherwise.</p> |
| 329 | </td> |
| 330 | </tr> |
| 331 | </tbody> |
| 332 | </table> |
Alex Saveau | 65f7317 | 2020-09-09 22:46:21 +0000 | [diff] [blame] | 333 | </div> |
Alex Saveau | f393e9a | 2020-09-17 21:15:59 +0000 | [diff] [blame] | 334 | <h2>Public constructors</h2> |
Fred Sladkey | 86625e3 | 2021-05-24 19:28:27 -0400 | [diff] [blame] | 335 | <div><a name="PagingSource--"></a><a name="pagingsource"></a> |
Alex Saveau | f393e9a | 2020-09-17 21:15:59 +0000 | [diff] [blame] | 336 | <h3 class="api-name" id="PagingSource()">PagingSource</h3> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 337 | <pre class="api-signature no-pretty-print"><Key : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, Value : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>> <a href="/reference/kotlin/androidx/paging/PagingSource.html#PagingSource()">PagingSource</a>()</pre> |
Alex Saveau | f393e9a | 2020-09-17 21:15:59 +0000 | [diff] [blame] | 338 | <div class="devsite-table-wrapper"> |
| 339 | <table class="responsive"> |
| 340 | <thead> |
| 341 | <tr> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 342 | <th colspan="100%">Parameters</th> |
Alex Saveau | f393e9a | 2020-09-17 21:15:59 +0000 | [diff] [blame] | 343 | </tr> |
| 344 | </thead> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 345 | <tbody class="list"> |
Alex Saveau | f393e9a | 2020-09-17 21:15:59 +0000 | [diff] [blame] | 346 | <tr> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 347 | <td width="40%"><code><Key : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 348 | <td> |
Andrea Falcone | 3adcc28 | 2020-12-04 09:31:29 -0500 | [diff] [blame] | 349 | <p>Type of key which define what data to load. E.g. <code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a></code> to represent either a page number or item position, or <code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></code> if your network uses Strings as next tokens returned with each response.</p> |
Alex Saveau | f393e9a | 2020-09-17 21:15:59 +0000 | [diff] [blame] | 350 | </td> |
| 351 | </tr> |
| 352 | <tr> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 353 | <td width="40%"><code><Value : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 354 | <td> |
Alex Saveau | f393e9a | 2020-09-17 21:15:59 +0000 | [diff] [blame] | 355 | <p>Type of data loaded in by this <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code>. E.g., the type of data that will be passed to a <code><a href="/reference/kotlin/androidx/paging/PagingDataAdapter.html">PagingDataAdapter</a></code> to be displayed in a <code>RecyclerView</code>.</p> |
| 356 | </td> |
| 357 | </tr> |
| 358 | </tbody> |
| 359 | </table> |
| 360 | </div> |
| 361 | </div> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 362 | <h2>Public functions</h2> |
Fred Sladkey | 86625e3 | 2021-05-24 19:28:27 -0400 | [diff] [blame] | 363 | <div><a name="getRefreshKey-androidx.paging.PagingState-"></a><a name="getrefreshkey"></a> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 364 | <h3 class="api-name" id="getRefreshKey(androidx.paging.PagingState)">getRefreshKey</h3> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 365 | <pre class="api-signature no-pretty-print">abstract fun <a href="/reference/kotlin/androidx/paging/PagingSource.html#getRefreshKey(androidx.paging.PagingState)">getRefreshKey</a>(state: <a href="/reference/kotlin/androidx/paging/PagingState.html">PagingState</a><Key, Value>): Key?</pre> |
Owen Gray | 327bd5c | 2021-03-23 10:21:18 -0400 | [diff] [blame] | 366 | <p>Provide a <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">Key</a></code> used for the initial <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">load</a></code> for the next <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> due to invalidation of this <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code>. The <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">Key</a></code> is provided to <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">load</a></code> via <code><a href="/reference/kotlin/androidx/paging/PagingSource.LoadParams.html#key()">LoadParams.key</a></code>.</p> |
Owen Gray | c2f8bde | 2022-04-25 13:17:41 -0400 | [diff] [blame] | 367 | <p>The <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">Key</a></code> returned by this method should cause <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">load</a></code> to load enough items to fill the viewport <em>around</em> the last accessed position, allowing the next generation to transparently animate in. The last accessed position can be retrieved via <code><a href="/reference/kotlin/androidx/paging/PagingState.html#anchorPosition()">state.anchorPosition</a></code>, which is typically the <em>top-most</em> or <em>bottom-most</em> item in the viewport due to access being triggered by binding items as they scroll into view.</p> |
| 368 | <p>For example, if items are loaded based on integer position keys, you can return <code>( (state.anchorPosition ?: 0) - state.config.initialLoadSize / 2).coerceAtLeast(0)</code>.</p> |
| 369 | <p>Alternately, if items contain a key used to load, get the key from the item in the page at index <code><a href="/reference/kotlin/androidx/paging/PagingState.html#anchorPosition()">state.anchorPosition</a></code> then try to center it based on <code>state.config.initialLoadSize</code>.</p> |
Owen Gray | 327bd5c | 2021-03-23 10:21:18 -0400 | [diff] [blame] | 370 | <div class="devsite-table-wrapper"> |
| 371 | <table class="responsive"> |
| 372 | <thead> |
| 373 | <tr> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 374 | <th colspan="100%">Parameters</th> |
Owen Gray | 327bd5c | 2021-03-23 10:21:18 -0400 | [diff] [blame] | 375 | </tr> |
| 376 | </thead> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 377 | <tbody class="list"> |
Owen Gray | 327bd5c | 2021-03-23 10:21:18 -0400 | [diff] [blame] | 378 | <tr> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 379 | <td width="40%"><code>state: <a href="/reference/kotlin/androidx/paging/PagingState.html">PagingState</a><Key, Value></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 380 | <td> |
Owen Gray | 327bd5c | 2021-03-23 10:21:18 -0400 | [diff] [blame] | 381 | <p><code><a href="/reference/kotlin/androidx/paging/PagingState.html">PagingState</a></code> of the currently fetched data, which includes the most recently accessed position in the list via <code><a href="/reference/kotlin/androidx/paging/PagingState.html#anchorPosition()">PagingState.anchorPosition</a></code>.</p> |
| 382 | </td> |
| 383 | </tr> |
| 384 | </tbody> |
| 385 | </table> |
| 386 | </div> |
| 387 | <div class="devsite-table-wrapper"> |
| 388 | <table class="responsive"> |
| 389 | <thead> |
| 390 | <tr> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 391 | <th colspan="100%">Returns</th> |
Owen Gray | 327bd5c | 2021-03-23 10:21:18 -0400 | [diff] [blame] | 392 | </tr> |
| 393 | </thead> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 394 | <tbody class="list"> |
Owen Gray | 327bd5c | 2021-03-23 10:21:18 -0400 | [diff] [blame] | 395 | <tr> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 396 | <td width="40%"><code>Key?</code></td> |
| 397 | <td> |
Owen Gray | 327bd5c | 2021-03-23 10:21:18 -0400 | [diff] [blame] | 398 | <p><code><a href="/reference/kotlin/androidx/paging/PagingSource.html">Key</a></code> passed to <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">load</a></code> after invalidation used for initial load of the next generation. The <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">Key</a></code> returned by <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#getRefreshKey(androidx.paging.PagingState)">getRefreshKey</a></code> should load pages centered around user's current viewport. If the correct <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">Key</a></code> cannot be determined, <code>null</code> can be returned to allow <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">load</a></code> decide what default key to use.</p> |
| 399 | </td> |
| 400 | </tr> |
| 401 | </tbody> |
| 402 | </table> |
| 403 | </div> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 404 | </div> |
Fred Sladkey | 86625e3 | 2021-05-24 19:28:27 -0400 | [diff] [blame] | 405 | <div><a name="invalidate--"></a><a name="invalidate"></a> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 406 | <h3 class="api-name" id="invalidate()">invalidate</h3> |
Owen Gray | 327bd5c | 2021-03-23 10:21:18 -0400 | [diff] [blame] | 407 | <pre class="api-signature no-pretty-print">fun <a href="/reference/kotlin/androidx/paging/PagingSource.html#invalidate()">invalidate</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a></pre> |
Alex Saveau | fe9fe47 | 2020-09-10 01:41:31 +0000 | [diff] [blame] | 408 | <p>Signal the <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> to stop loading.</p> |
| 409 | <p>This method is idempotent. i.e., If <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#invalidate()">invalidate</a></code> has already been called, subsequent calls to this method should have no effect.</p> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 410 | </div> |
Fred Sladkey | 86625e3 | 2021-05-24 19:28:27 -0400 | [diff] [blame] | 411 | <div><a name="load-androidx.paging.PagingSource.LoadParams-"></a><a name="load"></a> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 412 | <h3 class="api-name" id="load(androidx.paging.PagingSource.LoadParams)">load</h3> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 413 | <pre class="api-signature no-pretty-print">abstract suspend fun <a href="/reference/kotlin/androidx/paging/PagingSource.html#load(androidx.paging.PagingSource.LoadParams)">load</a>(params: <a href="/reference/kotlin/androidx/paging/PagingSource.LoadParams.html">PagingSource.LoadParams</a><Key>): <a href="/reference/kotlin/androidx/paging/PagingSource.LoadResult.html">PagingSource.LoadResult</a><Key, Value></pre> |
Alex Saveau | fe9fe47 | 2020-09-10 01:41:31 +0000 | [diff] [blame] | 414 | <p>Loading API for <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code>.</p> |
| 415 | <p>Implement this method to trigger your async load (e.g. from database or network).</p> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 416 | </div> |
Fred Sladkey | 86625e3 | 2021-05-24 19:28:27 -0400 | [diff] [blame] | 417 | <div><a name="registerInvalidatedCallback-kotlin.Function0-"></a><a name="registerinvalidatedcallback"></a> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 418 | <h3 class="api-name" id="registerInvalidatedCallback(kotlin.Function0)">registerInvalidatedCallback</h3> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 419 | <pre class="api-signature no-pretty-print">fun <a href="/reference/kotlin/androidx/paging/PagingSource.html#registerInvalidatedCallback(kotlin.Function0)">registerInvalidatedCallback</a>(onInvalidatedCallback: () <span style="white-space: nowrap;">-></span> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a></pre> |
Alex Saveau | fe9fe47 | 2020-09-10 01:41:31 +0000 | [diff] [blame] | 420 | <p>Add a callback to invoke when the <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> is first invalidated.</p> |
| 421 | <p>Once invalidated, a <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> will not become valid again.</p> |
| 422 | <p>A <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> will only invoke its callbacks once - the first time <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#invalidate()">invalidate</a></code> is called, on that thread.</p> |
Owen Gray | c2f8bde | 2022-04-25 13:17:41 -0400 | [diff] [blame] | 423 | <p>If this <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> is already invalid, the provided <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#registerInvalidatedCallback(kotlin.Function0)">onInvalidatedCallback</a></code> will be triggered immediately.</p> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 424 | <div class="devsite-table-wrapper"> |
| 425 | <table class="responsive"> |
| 426 | <thead> |
| 427 | <tr> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 428 | <th colspan="100%">Parameters</th> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 429 | </tr> |
| 430 | </thead> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 431 | <tbody class="list"> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 432 | <tr> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 433 | <td width="40%"><code>onInvalidatedCallback: () <span style="white-space: nowrap;">-></span> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 434 | <td> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 435 | <p>The callback that will be invoked on thread that invalidates the <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code>.</p> |
| 436 | </td> |
| 437 | </tr> |
| 438 | </tbody> |
| 439 | </table> |
| 440 | </div> |
| 441 | </div> |
Fred Sladkey | 86625e3 | 2021-05-24 19:28:27 -0400 | [diff] [blame] | 442 | <div><a name="unregisterInvalidatedCallback-kotlin.Function0-"></a><a name="unregisterinvalidatedcallback"></a> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 443 | <h3 class="api-name" id="unregisterInvalidatedCallback(kotlin.Function0)">unregisterInvalidatedCallback</h3> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 444 | <pre class="api-signature no-pretty-print">fun <a href="/reference/kotlin/androidx/paging/PagingSource.html#unregisterInvalidatedCallback(kotlin.Function0)">unregisterInvalidatedCallback</a>(onInvalidatedCallback: () <span style="white-space: nowrap;">-></span> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a></pre> |
Alex Saveau | fe9fe47 | 2020-09-10 01:41:31 +0000 | [diff] [blame] | 445 | <p>Remove a previously added invalidate callback.</p> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 446 | <div class="devsite-table-wrapper"> |
| 447 | <table class="responsive"> |
| 448 | <thead> |
| 449 | <tr> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 450 | <th colspan="100%">Parameters</th> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 451 | </tr> |
| 452 | </thead> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 453 | <tbody class="list"> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 454 | <tr> |
Paweł Marks | 4724d6f | 2021-12-22 17:11:51 +0100 | [diff] [blame] | 455 | <td width="40%"><code>onInvalidatedCallback: () <span style="white-space: nowrap;">-></span> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a></code></td> |
Andrea Falcone | d77cf9d | 2021-04-26 17:34:56 -0400 | [diff] [blame] | 456 | <td> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 457 | <p>The previously added callback.</p> |
| 458 | </td> |
| 459 | </tr> |
| 460 | </tbody> |
| 461 | </table> |
| 462 | </div> |
| 463 | </div> |
Fred Sladkey | 375e2ba | 2021-05-26 20:13:00 +0000 | [diff] [blame] | 464 | <h2>Public properties</h2> |
| 465 | <div><a name="getInvalid()"></a><a name="setInvalid()"></a><a name="getInvalid--"></a><a name="setInvalid--"></a> |
| 466 | <h3 class="api-name" id="invalid()">invalid</h3> |
| 467 | <pre class="api-signature no-pretty-print">val <a href="/reference/kotlin/androidx/paging/PagingSource.html#invalid()">invalid</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a></pre> |
| 468 | <p>Whether this <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> has been invalidated, which should happen when the data this <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> represents changes since it was first instantiated.</p> |
| 469 | </div> |
| 470 | <div><a name="getJumpingSupported()"></a><a name="setJumpingSupported()"></a><a name="getJumpingSupported--"></a><a name="setJumpingSupported--"></a> |
| 471 | <h3 class="api-name" id="jumpingSupported()">jumpingSupported</h3> |
| 472 | <pre class="api-signature no-pretty-print">open val <a href="/reference/kotlin/androidx/paging/PagingSource.html#jumpingSupported()">jumpingSupported</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a></pre> |
| 473 | <p><code>true</code> if this <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> supports jumping, <code>false</code> otherwise.</p> |
| 474 | <p>Override this to <code>true</code> if pseudo-fast scrolling via jumps is supported.</p> |
Fred Sladkey | 6b33bca | 2021-06-01 17:39:06 +0000 | [diff] [blame] | 475 | <p>A jump occurs when a <code>RecyclerView</code> scrolls through a number of placeholders defined by <code><a href="/reference/kotlin/androidx/paging/PagingConfig.html#jumpThreshold()">PagingConfig.jumpThreshold</a></code> and triggers a load with <code><a href="/reference/kotlin/androidx/paging/LoadType.html#REFRESH">LoadType</a></code>.</p> |
Fred Sladkey | 375e2ba | 2021-05-26 20:13:00 +0000 | [diff] [blame] | 476 | <p><code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code>s that support jumps should override <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#getRefreshKey(androidx.paging.PagingState)">getRefreshKey</a></code> to return a <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">Key</a></code> that would load data fulfilling the viewport given a user's current <code><a href="/reference/kotlin/androidx/paging/PagingState.html#anchorPosition()">PagingState.anchorPosition</a></code>.</p> |
| 477 | <div class="devsite-table-wrapper"> |
| 478 | <table class="responsive"> |
| 479 | <thead> |
| 480 | <tr> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 481 | <th colspan="100%">See also</th> |
Fred Sladkey | 375e2ba | 2021-05-26 20:13:00 +0000 | [diff] [blame] | 482 | </tr> |
| 483 | </thead> |
Andrea Falcone | 80f1a8f | 2022-08-23 11:22:33 -0400 | [diff] [blame] | 484 | <tbody class="list"> |
Fred Sladkey | 375e2ba | 2021-05-26 20:13:00 +0000 | [diff] [blame] | 485 | <tr> |
| 486 | <td width="40%"><code><a href="/reference/kotlin/androidx/paging/PagingConfig.html#jumpThreshold()">jumpThreshold</a></code></td> |
| 487 | <td></td> |
| 488 | </tr> |
| 489 | </tbody> |
| 490 | </table> |
| 491 | </div> |
| 492 | </div> |
| 493 | <div><a name="getKeyReuseSupported()"></a><a name="setKeyReuseSupported()"></a><a name="getKeyReuseSupported--"></a><a name="setKeyReuseSupported--"></a> |
| 494 | <h3 class="api-name" id="keyReuseSupported()">keyReuseSupported</h3> |
| 495 | <pre class="api-signature no-pretty-print">open val <a href="/reference/kotlin/androidx/paging/PagingSource.html#keyReuseSupported()">keyReuseSupported</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a></pre> |
| 496 | <p><code>true</code> if this <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> expects to re-use keys to load distinct pages without a call to <code><a href="/reference/kotlin/androidx/paging/PagingSource.html#invalidate()">invalidate</a></code>, <code>false</code> otherwise.</p> |
| 497 | </div> |
Alex Saveau | e60da31 | 2020-09-09 23:34:43 +0000 | [diff] [blame] | 498 | </body> |
| 499 | </html> |