Advertisement
Guest User

Untitled

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