PositionalDataSource
public abstract class PositionalDataSource<T extends Object> extends DataSource
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 |
Summary
Nested types |
|---|
public abstract class PositionalDataSource.LoadInitialCallback<T extends Object>This class is deprecated. PositionalDataSource is deprecated and has been replaced by PagingSource |
public class PositionalDataSource.LoadInitialParamsThis class is deprecated. PositionalDataSource is deprecated and has been replaced by PagingSource |
public abstract class PositionalDataSource.LoadRangeCallback<T extends Object>This class is deprecated. PositionalDataSource is deprecated and has been replaced by PagingSource |
public class PositionalDataSource.LoadRangeParamsThis class is deprecated. PositionalDataSource is deprecated and has been replaced by PagingSource |
Public constructors |
|---|
<T extends Object> This method is deprecated. PositionalDataSource is deprecated and has been replaced by PagingSource |
Public methods |
|
|---|---|
static final int |
This method is deprecated. PositionalDataSource is deprecated and has been replaced by PagingSource |
static final int |
This method is deprecated. PositionalDataSource is deprecated and has been replaced by PagingSource |
abstract void |
@WorkerThreadThis method is deprecated. PositionalDataSource is deprecated and has been replaced by PagingSource |
abstract void |
@WorkerThreadThis method is deprecated. PositionalDataSource is deprecated and has been replaced by PagingSource |
final @NonNull PositionalDataSource<@NonNull V> |
This method is deprecated. PositionalDataSource is deprecated and has been replaced by PagingSource |
final @NonNull PositionalDataSource<@NonNull V> |
This method is deprecated. PositionalDataSource is deprecated and has been replaced by PagingSource |
final @NonNull PositionalDataSource<@NonNull V> |
<V extends Object> This method is deprecated. PositionalDataSource is deprecated and has been replaced by PagingSource |
final @NonNull PositionalDataSource<@NonNull V> |
<V extends Object> This method is deprecated. PositionalDataSource is deprecated and has been replaced by PagingSource |
Inherited methods |
||||||||
|---|---|---|---|---|---|---|---|---|
|
Public constructors
PositionalDataSource
public <T extends Object>PositionalDataSource()
| Parameters | |
|---|---|
<T extends Object> |
Type of items being loaded by the |
Public methods
public static final intcomputeInitialLoadPosition(
@NonNull PositionalDataSource.LoadInitialParams params,
int totalCount
)
Helper for computing an initial position in loadInitial when total data set size can be computed ahead of loading.
The value computed by this function will do bounds checking, page alignment, and positioning based on initial load size requested.
Example usage in a PositionalDataSource subclass:
class ItemDataSource extends PositionalDataSource<Item> {
private int computeCount() {
// actual count code here
}
private List<Item> loadRangeInternal(int startPosition, int loadCount) {
// actual load code here
}
@Override
public void loadInitial(@NonNull LoadInitialParams params,
@NonNull LoadInitialCallback<Item> callback) {
int totalCount = computeCount();
int position = computeInitialLoadPosition(params, totalCount);
int loadSize = computeInitialLoadSize(params, position, totalCount);
callback.onResult(loadRangeInternal(position, loadSize), position, totalCount);
}
@Override
public void loadRange(@NonNull LoadRangeParams params,
@NonNull LoadRangeCallback<Item> callback) {
callback.onResult(loadRangeInternal(params.startPosition, params.loadSize));
}
}
| Parameters | |
|---|---|
@NonNull PositionalDataSource.LoadInitialParams params |
Params passed to |
int totalCount |
Total size of the data set. |
| Returns | |
|---|---|
int |
Position to start loading at. |
| See also | |
|---|---|
computeInitialLoadSize |
public static final intcomputeInitialLoadSize(
@NonNull PositionalDataSource.LoadInitialParams params,
int initialLoadPosition,
int totalCount
)
Helper for computing an initial load size in loadInitial when total data set size can be computed ahead of loading.
This function takes the requested load size, and bounds checks it against the value returned by computeInitialLoadPosition.
Example usage in a PositionalDataSource subclass:
class ItemDataSource extends PositionalDataSource<Item> {
private int computeCount() {
// actual count code here
}
private List<Item> loadRangeInternal(int startPosition, int loadCount) {
// actual load code here
}
@Override
public void loadInitial(@NonNull LoadInitialParams params,
@NonNull LoadInitialCallback<Item> callback) {
int totalCount = computeCount();
int position = computeInitialLoadPosition(params, totalCount);
int loadSize = computeInitialLoadSize(params, position, totalCount);
callback.onResult(loadRangeInternal(position, loadSize), position, totalCount);
}
@Override
public void loadRange(@NonNull LoadRangeParams params,
@NonNull LoadRangeCallback<Item> callback) {
callback.onResult(loadRangeInternal(params.startPosition, params.loadSize));
}
}
| Parameters | |
|---|---|
@NonNull PositionalDataSource.LoadInitialParams params |
Params passed to |
int initialLoadPosition |
Value returned by |
int totalCount |
Total size of the data set. |
| Returns | |
|---|---|
int |
Number of items to load. |
| See also | |
|---|---|
computeInitialLoadPosition |
@WorkerThread
public abstract voidloadInitial(
@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. |
@WorkerThread
public abstract voidloadRange(
@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. |
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. |
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. |
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. |
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 |