{% setvar book_path %}/reference/androidx/_book.yaml{% endsetvar %} {% include "_shared/_reference-head-tags.html" %}

PositionalDataSource

public abstract class PositionalDataSource<T extends Object> extends DataSource

java.lang.Object
   ↳ androidx.paging.DataSource
     ↳ androidx.paging.PositionalDataSource

Position-based data loader for a fixed-size, countable data set, supporting fixed-size loads at arbitrary page positions.

Extend PositionalDataSource if you can load pages of a requested size at arbitrary positions, and provide a fixed item count. If your data source can't support loading arbitrary requested page sizes (e.g. when network page size constraints are only known at runtime), either use PageKeyedDataSource or ItemKeyedDataSource, or pass the initial result with the two parameter LoadInitialCallback.onResult.

Room can generate a Factory of PositionalDataSources for you:

@Dao
interface UserDao {
@Query("SELECT * FROM user ORDER BY age DESC")
public abstract DataSource.Factory<Integer, User> loadUsersByAgeDesc();
}
Parameters
<T extends Object>

Type of items being loaded by the PositionalDataSource.

Summary

Nested types

public abstract class PositionalDataSource.LoadInitialCallback<T extends Object>

Callback for loadInitial to return data, position, and count.

Holder object for inputs to loadInitial.

public abstract class PositionalDataSource.LoadRangeCallback<T extends Object>

Callback for PositionalDataSource loadRange to return data.

Holder object for inputs to loadRange.

Public constructors

Public methods

abstract void

Load initial list data.

abstract void

Called to load a range of data from the DataSource.

final @NonNull PositionalDataSource<@NonNull V>
<V extends Object> map(@NonNull Function<@NonNull T, @NonNull V> function)

Applies the given function to each value emitted by the DataSource.

final @NonNull PositionalDataSource<@NonNull V>
<V extends Object> map(@NonNull Function1<@NonNull T, @NonNull V> function)

Applies the given function to each value emitted by the DataSource.

final @NonNull PositionalDataSource<@NonNull V>
<V extends Object> mapByPage(
    @NonNull Function<@NonNull List<@NonNull T>, @NonNull List<@NonNull V>> function
)

Applies the given function to each value emitted by the DataSource.

final @NonNull PositionalDataSource<@NonNull V>
<V extends Object> mapByPage(
    @NonNull Function1<@NonNull List<@NonNull T>, @NonNull List<@NonNull V>> function
)

Applies the given function to each value emitted by the DataSource.

Inherited methods

From androidx.paging.DataSource
void

Add a callback to invoke when the DataSource is first invalidated.

void

Signal the data source to stop loading, and notify its callback.

boolean
void

Remove a previously added invalidate callback.

Public constructors

PositionalDataSource

public <T extends Object> PositionalDataSource()
Parameters
<T extends Object>

Type of items being loaded by the PositionalDataSource.

Public methods

loadInitial

@WorkerThread
public abstract void loadInitial(
    @NonNull PositionalDataSource.LoadInitialParams params,
    @NonNull PositionalDataSource.LoadInitialCallback<@NonNull T> callback
)

Load initial list data.

This method is called to load the initial page(s) from the DataSource.

LoadResult list must be a multiple of pageSize to enable efficient tiling.

Parameters
@NonNull PositionalDataSource.LoadInitialParams params

Parameters for initial load, including requested start position, load size, and page size.

@NonNull PositionalDataSource.LoadInitialCallback<@NonNull T> callback

Callback that receives initial load data, including position and total data set size.

loadRange

@WorkerThread
public abstract void loadRange(
    @NonNull PositionalDataSource.LoadRangeParams params,
    @NonNull PositionalDataSource.LoadRangeCallback<@NonNull T> callback
)

Called to load a range of data from the DataSource.

This method is called to load additional pages from the DataSource after the LoadInitialCallback passed to dispatchLoadInitial has initialized a PagedList.

Unlike loadInitial, this method must return the number of items requested, at the position requested.

Parameters
@NonNull PositionalDataSource.LoadRangeParams params

Parameters for load, including start position and load size.

@NonNull PositionalDataSource.LoadRangeCallback<@NonNull T> callback

Callback that receives loaded data.

map

public final @NonNull PositionalDataSource<@NonNull V> <V extends Object> map(@NonNull Function<@NonNull T, @NonNull V> function)

Applies the given function to each value emitted by the DataSource.

Same as mapByPage, but operates on individual items.

Parameters
@NonNull Function<@NonNull T, @NonNull V> function

Function that runs on each loaded item, returning items of a potentially new type.

Returns
@NonNull PositionalDataSource<@NonNull V>

A new DataSource, which transforms items using the given function.

map

public final @NonNull PositionalDataSource<@NonNull V> <V extends Object> map(@NonNull Function1<@NonNull T, @NonNull V> function)

Applies the given function to each value emitted by the DataSource.

An overload of map that accepts a kotlin function type.

Same as mapByPage, but operates on individual items.

Parameters
@NonNull Function1<@NonNull T, @NonNull V> function

Function that runs on each loaded item, returning items of a potentially new type.

Returns
@NonNull PositionalDataSource<@NonNull V>

A new DataSource, which transforms items using the given function.

See also
mapByPage
map

mapByPage

public final @NonNull PositionalDataSource<@NonNull V> <V extends Object> mapByPage(
    @NonNull Function<@NonNull List<@NonNull T>, @NonNull List<@NonNull V>> function
)

Applies the given function to each value emitted by the DataSource.

Same as map, but allows for batch conversions.

Parameters
@NonNull Function<@NonNull List<@NonNull T>, @NonNull List<@NonNull V>> function

Function that runs on each loaded page, returning items of a potentially new type.

Returns
@NonNull PositionalDataSource<@NonNull V>

A new DataSource, which transforms items using the given function.

See also
map
map
mapByPage

mapByPage

public final @NonNull PositionalDataSource<@NonNull V> <V extends Object> mapByPage(
    @NonNull Function1<@NonNull List<@NonNull T>, @NonNull List<@NonNull V>> function
)

Applies the given function to each value emitted by the DataSource.

An overload of mapByPage that accepts a kotlin function type.

Same as map, but allows for batch conversions.

Parameters
@NonNull Function1<@NonNull List<@NonNull T>, @NonNull List<@NonNull V>> function

Function that runs on each loaded page, returning items of a potentially new type.

Returns
@NonNull PositionalDataSource<@NonNull V>

A new DataSource, which transforms items using the given function.

See also
map
map
mapByPage