Last active
May 15, 2018 20:41
-
-
Save adrianhall/dd610ee3d2af484c98edcf790e289052 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Load the initial items | |
*/ | |
override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Note>) { | |
Log.d(TAG, "loadInitial: key=${params.requestedInitialKey ?: "undefined"}, size=${params.requestedLoadSize}") | |
val pageSize = minOf(MAX_PAGE_SIZE, params.requestedLoadSize) | |
val firstItem = inRange(params.requestedInitialKey ?: 0,0, items.size) | |
val lastItem = inRange(firstItem + pageSize, 0, items.size) | |
Log.d(TAG, "loadInitial: firstItem = $firstItem, lastItem = $lastItem") | |
val data = if (firstItem == lastItem) emptyList<Note>() else items.subList(firstItem, lastItem) | |
if (params.placeholdersEnabled) { | |
callback.onResult(data, firstItem, items.size) | |
} else { | |
callback.onResult(data) | |
} | |
} | |
/** | |
* Load the next page | |
*/ | |
override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Note>) { | |
Log.d(TAG, "loadAfter: key=${params.key}, size=${params.requestedLoadSize}") | |
val pageSize = minOf(MAX_PAGE_SIZE, params.requestedLoadSize) | |
val firstItem = inRange(params.key + 1, 0, items.size) | |
val lastItem = inRange(firstItem + pageSize, 0, items.size) | |
Log.d(TAG, "loadAfter: firstItem = $firstItem, lastItem = $lastItem") | |
val data = if (firstItem == lastItem) emptyList<Note>() else items.subList(firstItem, lastItem) | |
callback.onResult(data) | |
} | |
/** | |
* Load the previous page | |
*/ | |
override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<Note>) { | |
Log.d(TAG, "loadAfter: key=${params.key}, size=${params.requestedLoadSize}") | |
val pageSize = minOf(MAX_PAGE_SIZE, params.requestedLoadSize) | |
val lastItem = inRange(params.key - 1, 0, items.size) | |
val firstItem = inRange(lastItem - pageSize, 0, items.size) | |
Log.d(TAG, "loadBefore: firstItem = $firstItem, lastItem = $lastItem") | |
val data = if (firstItem == lastItem) emptyList<Note>() else items.subList(firstItem, lastItem) | |
callback.onResult(data) | |
} | |
/** | |
* Obtain an item based on the position | |
*/ | |
override fun getKey(item: Note): Int | |
= items.indexOfFirst { it.noteId == item.noteId } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment