오늘도 더 나은 코드를 작성하였습니까?

PagingData 스트림 설정(Pager 객체 만들기) 본문

Android Jetpack Architecture/Paging3

PagingData 스트림 설정(Pager 객체 만들기)

hik14 2021. 8. 19. 15:25

PagingSource에서 로드된 페이징된 데이터의 스트림을 내보내야 한다.

스트림에 대한 설정은  ViewModel 또는0Repository에서 하며  ViewModel 또는 Activity, Fragement에서 소비한다. 

 

Pager 클래스는 PagingSource에서 PagingData 객체의 반응형 스트림을 노출하는 메서드를 제공

 

Pager 객체를 만들어 반응형 스트림을 설정

 

- PagingConfig 구성 객체 ( 페이지의 크기,  미리 자리 차지 하기 등등)

- PagingSource 구현 인스턴스를 가져오는 방법을 Pager에 지시하는 함수를 인스턴스에 제공 (pagingSourceFactory)

class GithubRepository(private val service: GithubService) {

    fun getSearchResultStream(query: String): Flow<PagingData<Repo>> {
        return Pager(
                config = PagingConfig(
                pageSize = NETWORK_PAGE_SIZE,
                enablePlaceholders = false
             ),
                pagingSourceFactory = { GithubPagingSource(service, query) }
        ).flow
    	.cachedIn(viewModelScope)
    }

    companion object {
        private const val NETWORK_PAGE_SIZE = 50
    }
}

 

cachedIn() 연산자는 데이터 스트림을 공유 가능하게 하며 제공된 CoroutineScope을 사용하여 로드된 데이터를 캐시합니다.

 

Pager 객체는 PagingSource 객체에서 load() 메서드에  LoadParams 객체를 제공하고 반환되는 LoadResult 객체를 수신한다.

'Android Jetpack Architecture > Paging3' 카테고리의 다른 글

네트워크 및 데이터베이스의 페이징.  (0) 2021.08.19
UI에 페이징된 데이터 표시  (0) 2021.08.19
PagingDataAdapter 정의하기.  (0) 2021.08.19
Paging3 데이터 로드  (0) 2021.08.19
Paging3 개요  (0) 2021.08.09