-
public class AsyncListUtil<T>
A utility class that supports asynchronous content loading.
It can be used to load Cursor data in chunks without querying the Cursor on the UI Thread while keeping UI and cache synchronous for better user experience.
It loads the data on a background thread and keeps only a limited number of fixed sized chunks in memory at all times.
AsyncListUtil queries the currently visible range through ViewCallback, loads the required data items in the background through DataCallback, and notifies a ViewCallback when the data is loaded. It may load some extra items for smoother scrolling.
Note that this class uses a single thread to load the data, so it suitable to load data from secondary storage such as disk, but not from network.
This class is designed to work with RecyclerView, but it does not depend on it and can be used with other list views.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description public abstract class
AsyncListUtil.DataCallback
The callback that provides data access for AsyncListUtil.
All methods are called on the background thread.
public abstract class
AsyncListUtil.ViewCallback
The callback that links AsyncListUtil with the list view.
All methods are called on the main thread.
-
Constructor Summary
Constructors Constructor Description AsyncListUtil(Class<T> klass, int tileSize, AsyncListUtil.DataCallback<T> dataCallback, AsyncListUtil.ViewCallback viewCallback)
Creates an AsyncListUtil.
-
Method Summary
Modifier and Type Method Description void
onRangeChanged()
Updates the currently visible item range. void
refresh()
Forces reloading the data. T
getItem(int position)
Returns the data item at the given position or null
if it has not been loadedyet.int
getItemCount()
Returns the number of items in the data set. -
-
Constructor Detail
-
AsyncListUtil
AsyncListUtil(Class<T> klass, int tileSize, AsyncListUtil.DataCallback<T> dataCallback, AsyncListUtil.ViewCallback viewCallback)
Creates an AsyncListUtil.- Parameters:
klass
- Class of the data item.tileSize
- Number of item per chunk loaded at once.dataCallback
- Data access callback.viewCallback
- Callback for querying visible item range and update notifications.
-
-
Method Detail
-
onRangeChanged
void onRangeChanged()
Updates the currently visible item range.
Identifies the data items that have not been loaded yet and initiates loading them in thebackground. Should be called from the view's scroll listener (such as onScrolled).
-
refresh
void refresh()
Forces reloading the data.
Discards all the cached data and reloads all required data items for the currently visiblerange. To be called when the data item count and/or contents has changed.
-
getItem
@Nullable() T getItem(int position)
Returns the data item at the given position or
null
if it has not been loadedyet.If this method has been called for a specific position and returned
null
, then onItemLoaded will be called when it finally loads. Note that ifthis position stays outside of the cached item range (as defined by extendRangeInto method), then the callback will never be called forthis position.- Parameters:
position
- Item position.
-
getItemCount
int getItemCount()
Returns the number of items in the data set.
This is the number returned by a recent call to refreshData.
-
-
-
-