본문 바로가기
안드로이드/Compose

[Compose] 페이징 데이터 로드 및 표시

by jinwo_o 2024. 11. 24.

https://developer.android.com/topic/libraries/architecture/paging/v3-paged-data?hl=ko

 

페이징 데이터 로드 및 표시  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 페이징 데이터 로드 및 표시 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Paging 라이브러리는 대규

developer.android.com

  • Paging3 라이브러리를 사용하여 LazyColumn 을 구현했지만, 초기 로드 시 여러 페이지에 대한 API 호출로 인해 처음에 가져오는 데이터 사이즈가 터무니없이 크다고 느껴졌다.
    • 안타깝게도 문제의 원인을 찾지 못했다.
      • GPT 에 따르면 다음 페이지를 미리 로드하여 사용자가 스크롤할 때, 부드러운 사용자 경험을 제공한다고 하지만, PagingConfig 클래스를 수정해 봐도 반복되는 API 호출은 막을 수 없었다.
      • 만약 미리 로드하는 것이 맞다면, 사용자가 보지 않는 데이터가 문제가 되지 않을까 하는 의문이 된다.

https://manavtamboli.medium.com/infinite-list-paged-list-in-jetpack-compose-b10fc7e74768

 

Infinite List / Paged List in Jetpack Compose

Pagination is important in any application containing large datasets. Whether it is from a remote network or from local database.

manavtamboli.medium.com

@Composable
fun LazyListState.OnBottomReached(
    loadMore : () -> Unit
){
    val shouldLoadMore = remember {
        derivedStateOf {
            val lastVisibleItem = layoutInfo.visibleItemsInfo.lastOrNull()
                ?: return@derivedStateOf true
          
            lastVisibleItem.index == layoutInfo.totalItemsCount - 1
        }
    }
    
    // Convert the state into a cold flow and collect
    LaunchedEffect(shouldLoadMore){
        snapshotFlow { shouldLoadMore.value }
            .collect { 
                // if should load more, then invoke loadMore
                if (it) loadMore()
            }
    }
}