epoxy
epoxy copied to clipboard
Epoxy Paging3
Hello, I am using Epoxy Paging 3 in my project and I ran into the following problem: I need to load 10 items per page, but when the application is opened, the load method in the Paging Source class is called 2 times, and I have created not 10 items, but 20 (each call load 10 items). What could be the problem ? And how to solve this problem?
My PagingSource class `class MemeDataSource: PagingSource<Int, Memes>() { val TAG: String = "Main" val listMemes : MutableList<Memes> = mutableListOf() val dataRef = FirebaseDatabase.getInstance().getReference("memes") var limit = 10 override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Memes> { Log.d(TAG, "load: ") val nextPageNumber = params.key ?: 0 dataRef.limitToFirst(limit).addValueEventListener(object : ValueEventListener { override fun onCancelled(error: DatabaseError) { }
override fun onDataChange(snapshot: DataSnapshot) {
Log.d(TAG, "onDataChange: ${listMemes.size} ")
for (child: DataSnapshot in snapshot.children) {
val mem = child.getValue(Memes::class.java)
mem?.let {
if(!listMemes.contains(mem)) {
listMemes.add(mem)
}
}
}
}
})
return LoadResult.Page(
data = listMemes,
prevKey = if (nextPageNumber > 0) nextPageNumber-1 else null,
nextKey = nextPageNumber+1 )
}
override fun getRefreshKey(state: PagingState<Int, Memes>): Int? {
TODO("Not yet implemented")
}
}`
My ViewModel Class
class MyViewModel: ViewModel() { val passengers = Pager(PagingConfig(pageSize = 10)) { MemeDataSource() }.flow.cachedIn(viewModelScope) }
My Activity class
`class MainActivity2 : AppCompatActivity() {
val TAG = "Main"
private val viewModel: MyViewModel = MyViewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
val pagingController = Controllers()
val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)
recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.adapter = pagingController.adapter
lifecycleScope.launch{
viewModel.passengers.collectLatest { pagedData ->
pagingController.submitData(pagedData)
Log.d(TAG, "onCreate:")
}
}
}
}`
My PagingDataEpoxyController class `@ObsoleteCoroutinesApi class Controllers: PagingDataEpoxyController<Memes>( modelBuildingHandler = EpoxyAsyncUtil.getAsyncBackgroundHandler()){ val TAG: String = "Main"
override fun buildItemModel(currentPosition: Int, item: Memes?): EpoxyModel<*> {
return if (item == null) {
EmptyItemHolder_()
.id(currentPosition)
} else {
Log.d(TAG, "buildItemModel: ${currentPosition}")
MemesItemHolder_()
.id(item.id)
.mem(item)
}
}
}`
this is what i see in the logo
2021-02-28 22:50:29.161 4080-4080/com.example.addmemesbd D/Main: load: 2021-02-28 22:50:29.455 4080-4080/com.example.addmemesbd D/Main: onDataChange: 0 2021-02-28 22:50:29.565 4080-4080/com.example.addmemesbd D/Main: load: 2021-02-28 22:50:29.568 4080-4080/com.example.addmemesbd D/Main: onDataChange: 10 2021-02-28 22:50:29.583 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 0 2021-02-28 22:50:29.588 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 1 2021-02-28 22:50:29.588 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 2 2021-02-28 22:50:29.588 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 3 2021-02-28 22:50:29.588 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 4 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 5 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 6 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 7 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 8 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 9 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 10 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 11 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 12 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 13 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 14 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 15 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 16 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 17 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 18 2021-02-28 22:50:29.589 4080-4243/com.example.addmemesbd D/Main: buildItemModel: 19
Set initialLoadSize in PagingConfig to something bigger like config = PagingConfig(pageSize = NETWORK_PAGE_SIZE, enablePlaceholders = false,initialLoadSize = NETWORK_PAGE_SIZE*2),
Set initialLoadSize in PagingConfig to something bigger like config = PagingConfig(pageSize = NETWORK_PAGE_SIZE, enablePlaceholders = false,initialLoadSize = NETWORK_PAGE_SIZE*2),
class MyViewModel: ViewModel() { companion object { private const val NETWORK_PAGE_SIZE = 10 } val passengers = Pager(PagingConfig( pageSize = NETWORK_PAGE_SIZE, enablePlaceholders = false, initialLoadSize = NETWORK_PAGE_SIZE*2)) { MemeDataSource() }.flow.cachedIn(viewModelScope) }
Unfortunately it didn't help
Lofcat:
2021-03-02 10:18:37.399 13115-13115/com.example.addmemesbd D/Main: load: 2021-03-02 10:18:37.577 13115-13115/com.example.addmemesbd D/Main: onDataChange: 0 2021-03-02 10:18:37.664 13115-13115/com.example.addmemesbd D/Main: load: 2021-03-02 10:18:37.668 13115-13115/com.example.addmemesbd D/Main: onDataChange: 10 2021-03-02 10:18:37.678 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 0 2021-03-02 10:18:37.683 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 1 2021-03-02 10:18:37.683 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 2 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 3 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 4 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 5 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 6 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 7 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 8 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 9 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 10 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 11 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 12 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 13 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 14 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 15 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 16 2021-03-02 10:18:37.684 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 17 2021-03-02 10:18:37.685 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 18 2021-03-02 10:18:37.685 13115-13269/com.example.addmemesbd D/Main: buildItemModel: 19
Epoxy only supports for Paging 3.