PagingSource.LoadResult.Page

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


Success result object for PagingSource.load.

// 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

Public fields

final @NonNull List<@NonNull Value>

Loaded data

final int

Optional count of items after the loaded data.

final int

Optional count of items before the loaded data.

final @Nullable Key

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

final @Nullable Key

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

Public constructors

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

Success result object for PagingSource.load.

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

Public fields

data

@NonNull
public final @NonNull List<@NonNull Value> data

Loaded data

itemsAfter

@NonNull
public final int itemsAfter

Optional count of items after the loaded data.

itemsBefore

@NonNull
public final int itemsBefore

Optional count of items before the loaded data.

nextKey

@Nullable
public final @Nullable Key nextKey

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

prevKey

@Nullable
public final @Nullable Key prevKey

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

Public constructors

Page

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

Success result object for PagingSource.load.

Parameters
@NonNull List<@NonNull Value> data

Loaded data

@Nullable Key prevKey

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

@Nullable Key nextKey

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

Page

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