PagingSource.LoadResult.Page

public final class PagingSource.LoadResult.Page<Key extends Object, Value extends Object> extends PagingSource.LoadResult implements Iterable


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

static final int

Public constructors

<Key extends Object, Value extends Object> Page(
    @NonNull List<@NonNull Value> data,
    Key prevKey,
    Key nextKey
)

Success result object for PagingSource.load.

<Key extends Object, Value extends Object> Page(
    @NonNull List<@NonNull Value> data,
    Key prevKey,
    Key nextKey,
    @IntRange(from = -2147483648) int itemsBefore,
    @IntRange(from = -2147483648) int itemsAfter
)

Public methods

final @NonNull List<@NonNull Value>

Loaded data

final int

Count of items after the loaded data.

final int

Count of items before the loaded data.

final Key

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

final Key

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

@NonNull Iterator<@NonNull Value>
@NonNull String

Constants

COUNT_UNDEFINED

public static final int COUNT_UNDEFINED

Public constructors

Page

public <Key extends Object, Value extends Object> Page(
    @NonNull List<@NonNull Value> data,
    Key prevKey,
    Key nextKey
)

Success result object for PagingSource.load.

Parameters
@NonNull List<@NonNull Value> data

Loaded data

Key prevKey

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

Key nextKey

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

Page

public <Key extends Object, Value extends Object> Page(
    @NonNull List<@NonNull Value> data,
    Key prevKey,
    Key nextKey,
    @IntRange(from = -2147483648) int itemsBefore,
    @IntRange(from = -2147483648) int itemsAfter
)

Public methods

getData

Added in 3.0.0
public final @NonNull List<@NonNull Value> getData()

Loaded data

getItemsAfter

Added in 3.0.0
public final int getItemsAfter()

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

getItemsBefore

Added in 3.0.0
public final int getItemsBefore()

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

getNextKey

Added in 3.0.0
public final Key getNextKey()

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

getPrevKey

Added in 3.0.0
public final Key getPrevKey()

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

iterator

Added in 3.2.0
public @NonNull Iterator<@NonNull Value> iterator()

toString

public @NonNull String toString()