PagingSource.LoadResult.Page


Success result object for PagingSource.load.

As a convenience, iterating on this object will iterate through its loaded data.

// One common method of pagination is to use next (and optionally previous) tokens.
// The below code shows you how to
data class NetworkResponseObject(
    val items: List<Item>,
    val next: String,
    val approximateItemsRemaining: Int
)

// The following shows how you use convert such a response loaded in PagingSource.load() to
// a Page, which can be returned from that method
fun NetworkResponseObject.toPage() = LoadResult.Page(
    data = items,
    prevKey = null, // this implementation can only append, can't load a prepend
    nextKey = next, // next token will be the params.key of a subsequent append load
    itemsAfter = approximateItemsRemaining
)
// If you load by page number, the response may not define how to load the next page.
data class NetworkResponseObject(
    val items: List<Item>
)

// The following shows how you use the current page number (e.g., the current key in
// PagingSource.load() to convert a response into a Page, which can be returned from that method
fun NetworkResponseObject.toPage(pageNumber: Int): LoadResult.Page<Int, Item> {
    return LoadResult.Page(
        data = items,
        // Since 0 is the lowest page number, return null to signify no more pages
        // should be loaded before it.
        prevKey = if (pageNumber > 0) pageNumber - 1 else null,
        // This API defines that it's out of data when a page returns empty. When out of
        // data, we return `null` to signify no more pages should be loaded
        // If the response instead
        nextKey = if (items.isNotEmpty()) pageNumber + 1 else null
    )
}

Summary

Constants

const Int
Cmn

Public constructors

<Key : Any, Value : Any> Page(data: List<Value>, prevKey: Key?, nextKey: Key?)

Success result object for PagingSource.load.

Cmn
<Key : Any, Value : Any> Page(
    data: List<Value>,
    prevKey: Key?,
    nextKey: Key?,
    itemsBefore: @IntRange(from = -2147483648) Int,
    itemsAfter: @IntRange(from = -2147483648) Int
)
Cmn

Public functions

open operator Iterator<Value>
Cmn
open String
Cmn

Public properties

List<Value>

Loaded data

Cmn
Int

Count of items after the loaded data.

Cmn
Int

Count of items before the loaded data.

Cmn
Key?

Key for next page if more data can be loaded in that direction, null otherwise.

Cmn
Key?

Key for previous page if more data can be loaded in that direction, null otherwise.

Cmn

Constants

COUNT_UNDEFINED

const val COUNT_UNDEFINEDInt

Public constructors

Page

<Key : Any, Value : Any> Page(data: List<Value>, prevKey: Key?, nextKey: Key?)

Success result object for PagingSource.load.

Parameters
data: List<Value>

Loaded data

prevKey: Key?

Key for previous page if more data can be loaded in that direction, null otherwise.

nextKey: Key?

Key for next page if more data can be loaded in that direction, null otherwise.

Page

<Key : Any, Value : Any> Page(
    data: List<Value>,
    prevKey: Key?,
    nextKey: Key?,
    itemsBefore: @IntRange(from = -2147483648) Int = COUNT_UNDEFINED,
    itemsAfter: @IntRange(from = -2147483648) Int = COUNT_UNDEFINED
)

Public functions

iterator

open operator fun iterator(): Iterator<Value>

toString

open fun toString(): String

Public properties

data

val dataList<Value>

Loaded data

itemsAfter

val itemsAfterInt

Count of items after the loaded data. Must be implemented if jumping is enabled. Optional otherwise.

itemsBefore

val itemsBeforeInt

Count of items before the loaded data. Must be implemented if jumping is enabled. Optional otherwise.

nextKey

val nextKey: Key?

Key for next page if more data can be loaded in that direction, null otherwise.

prevKey

val prevKey: Key?

Key for previous page if more data can be loaded in that direction, null otherwise.