0

I am showing media data (10k to 2L thumbnails) in a grid view, issue is observed sometimes(not always) when we do fast scroll on recycler view. Data fails to load and two scenario happens: 1.No events logged in galleryAdapter.addLoadStateListener and galleryAdapter.addOnPagesUpdatedListener 2. Keeps getting events in above listeners without stop, even not scrolling list.

DB query:

@Query("SELECT * from MediaInfo order by creationDate DESC")
    fun getAllMediaPaged(): PagingSource<Int, MediaInfo>

ViewModel:

var currentResult: Flow<PagingData<MediaItem>>? = null

    fun getMediaItemsPaged(): Flow<PagingData<MediaItem>> {
        val lastResult = currentResult
        if (lastResult != null)
            return lastResult
        val newResult: Flow<PagingData<MediaItem>> = Pager(
            PagingConfig(
                pageSize = 200,
                prefetchDistance = 200,
                maxSize= 200 + (2 * 200),
                jumpThreshold = 100
            )
        ) {
            localDataSource.getAllMediaPaged()
        }.flow
            .map { pagingMediaInfo ->
            pagingMediaInfo
                .map { mediaInfo ->
                    MediaItem.MediaSectionItem(
                        sectionName = mediaInfo.header,
                        mediaInfo = mediaInfo
                    )
                }
                .insertSeparators { before:MediaItem?, after:MediaItem? ->
                    insertHeader(before, after)
                }
        }.cachedIn(viewModelScope)
        currentResult = newResult
        return newResult
    }

Fragment:

private fun getMediaItems(galleryAdapter: GalleryAdapter) {
        lifecycleScope.launch {
            viewModel.getMediaItemsPaged().collectLatest {
                galleryAdapter.submitData(lifecycle, it)
            }
        }
    }
Abhishek
  • 153
  • 1
  • 2
  • 11

0 Answers0