Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. override fun onBindViewHolder(holder: ViewHolder, position: Int) {
  2. getItem(position).let { wkda ->
  3. with(holder) {
  4. wkda?.apply { bind(createOnClickListener(this)) }
  5. }
  6. }
  7. }
  8.  
  9. vm.manufacturers.observe(viewLifecycleOwner) { manufacturers ->
  10. adapter.submitList(manufacturers)
  11. }
  12.  
  13. var manufacturers: MutableLiveData<PagedList<WKDA>> = MutableLiveData()
  14.  
  15. init {
  16. viewModelScope.launch {
  17. repository.getManufacturers(manufacturers)
  18. }
  19. }
  20.  
  21. suspend fun getManufacturers(manufacturers: MutableLiveData<PagedList<WKDA>>) {
  22. withContext(Dispatchers.IO) {
  23. manufacturers.postValue(ManufacturerPagedList.
  24. getInstance().
  25. fetchPage())
  26. }
  27. }
  28.  
  29. private val executor = ManufacturerExecutor()
  30.  
  31. private val paginationConfig: PagedList.Config = PagedList.Config.Builder()
  32. .setPageSize(PAGE_SIZE)
  33. .setPrefetchDistance(FETCH_DISTANCE)
  34. .setEnablePlaceholders(false)
  35. .build()
  36.  
  37. companion object {
  38. @Volatile
  39. private var instance: ManufacturerPagedList? = null
  40. fun getInstance() = instance ?: synchronized(this) {
  41. ManufacturerPagedList().also {
  42. instance = it
  43. }
  44. }
  45. }
  46.  
  47. fun fetchPage(): PagedList<WKDA> = PagedList.Builder<Int, WKDA>(
  48. MockDataSource(),
  49. paginationConfig)
  50. .setInitialKey(INITIAL_KEY)
  51. .setFetchExecutor(executor)
  52. .setNotifyExecutor(executor)
  53. .build()
  54. }
  55.  
  56. class MockDataSource : PageKeyedDataSource<Int, WKDA>() {
  57. override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Int, WKDA>) {
  58. callback.onResult(List(20) { generatePost(params.requestedLoadSize) }.toList(), -1, 1)
  59. }
  60.  
  61. override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, WKDA>) {
  62. callback.onResult(List(20) { generatePost(params.key) }.toList(), params.key + 1)
  63. }
  64.  
  65. override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<Int, WKDA>) {
  66. callback.onResult(List(20) { generatePost(params.key) }.toList(), params.key - 1)
  67. }
  68.  
  69. private fun generatePost(key: Int): WKDA {
  70. return WKDA("name", "author $key")
  71. }
  72. }
  73.  
  74. const val INITIAL_KEY: Int = 0
  75. const val PAGE_SIZE: Int = 15
  76. const val FETCH_DISTANCE: Int = 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement