epoxy icon indicating copy to clipboard operation
epoxy copied to clipboard

Epoxy Paging3

Open V-Danil-A opened this issue 4 years ago • 4 comments
trafficstars

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)
        
    }
}

}`

V-Danil-A avatar Feb 28 '21 17:02 V-Danil-A

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

V-Danil-A avatar Feb 28 '21 19:02 V-Danil-A

Set initialLoadSize in PagingConfig to something bigger like config = PagingConfig(pageSize = NETWORK_PAGE_SIZE, enablePlaceholders = false,initialLoadSize = NETWORK_PAGE_SIZE*2),

degea9 avatar Mar 02 '21 03:03 degea9

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

V-Danil-A avatar Mar 02 '21 07:03 V-Danil-A

Epoxy only supports for Paging 3.

HeinHtetZaw99 avatar May 24 '22 17:05 HeinHtetZaw99