Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- override fun onBindViewHolder(holder: ViewHolder, position: Int) {
- getItem(position).let { wkda ->
- with(holder) {
- wkda?.apply { bind(createOnClickListener(this)) }
- }
- }
- }
- vm.manufacturers.observe(viewLifecycleOwner) { manufacturers ->
- adapter.submitList(manufacturers)
- }
- var manufacturers: MutableLiveData<PagedList<WKDA>> = MutableLiveData()
- init {
- viewModelScope.launch {
- repository.getManufacturers(manufacturers)
- }
- }
- suspend fun getManufacturers(manufacturers: MutableLiveData<PagedList<WKDA>>) {
- withContext(Dispatchers.IO) {
- manufacturers.postValue(ManufacturerPagedList.
- getInstance().
- fetchPage())
- }
- }
- private val executor = ManufacturerExecutor()
- private val paginationConfig: PagedList.Config = PagedList.Config.Builder()
- .setPageSize(PAGE_SIZE)
- .setPrefetchDistance(FETCH_DISTANCE)
- .setEnablePlaceholders(false)
- .build()
- companion object {
- @Volatile
- private var instance: ManufacturerPagedList? = null
- fun getInstance() = instance ?: synchronized(this) {
- ManufacturerPagedList().also {
- instance = it
- }
- }
- }
- fun fetchPage(): PagedList<WKDA> = PagedList.Builder<Int, WKDA>(
- MockDataSource(),
- paginationConfig)
- .setInitialKey(INITIAL_KEY)
- .setFetchExecutor(executor)
- .setNotifyExecutor(executor)
- .build()
- }
- class MockDataSource : PageKeyedDataSource<Int, WKDA>() {
- override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Int, WKDA>) {
- callback.onResult(List(20) { generatePost(params.requestedLoadSize) }.toList(), -1, 1)
- }
- override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, WKDA>) {
- callback.onResult(List(20) { generatePost(params.key) }.toList(), params.key + 1)
- }
- override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<Int, WKDA>) {
- callback.onResult(List(20) { generatePost(params.key) }.toList(), params.key - 1)
- }
- private fun generatePost(key: Int): WKDA {
- return WKDA("name", "author $key")
- }
- }
- const val INITIAL_KEY: Int = 0
- const val PAGE_SIZE: Int = 15
- const val FETCH_DISTANCE: Int = 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement