목록 및 페이징으로 데이터를 지연 로드

지연 로드와 Paging을 사용하면 데이터를 점진적으로 로드하고 표시하여 앱에서 무한 목록을 비롯한 대규모 항목 목록을 지원할 수 있습니다. 이 기법을 사용하면 초기 로드 시간을 줄이고 메모리 사용량을 최적화하여 성능을 개선할 수 있습니다.

결과

다음 동영상은 사용자가 스크롤할 때 데이터를 가져오는 대규모 목록의 결과 동작을 보여줍니다.

버전 호환성

이 구현을 사용하려면 프로젝트 minSDK를 API 수준 21 이상으로 설정해야 합니다.

종속 항목

페이징된 콘텐츠 표시

Paging 라이브러리를 사용하면 로컬 저장소에서나 네트워크를 통해 가져온 대규모 데이터 세트의 데이터 페이지를 로드하고 표시할 수 있습니다. 다음 코드를 사용하여 진행률 표시줄을 표시하는 페이지로 나눈 목록을 표시하여 사용자에게 더 많은 데이터를 가져오고 있음을 나타냅니다.

@Composable
fun MessageList(
    modifier: Modifier,
    pager: Pager<Int, Message>
) {
    val lazyPagingItems = pager.flow.collectAsLazyPagingItems()

    LazyColumn {
        items(
            lazyPagingItems.itemCount,
            key = lazyPagingItems.itemKey { it.id }
        ) { index ->
            val message = lazyPagingItems[index]
            if (message != null) {
                MessageRow(message)
            } else {
                MessagePlaceholder()
            }
        }
    }
    @Composable
    fun MessagePlaceholder(modifier: Modifier) {
        Box(
            Modifier
                .fillMaxWidth()
                .height(48.dp)
        ) {
            CircularProgressIndicator()
        }
    }

    @Composable
    fun MessageRow(
        modifier: Modifier,
        message: Message
    ) {
        Card(modifier = Modifier.padding(8.dp)) {
            Column(
                modifier = Modifier.padding(8.dp),
                verticalArrangement = Arrangement.Center
            ) {
                Text(message.sender)
                Text(message.text)
            }
        }
    }
}

코드에 관한 핵심 사항

  • LazyColumn: 이 컴포저블은 큰 항목 목록(메시지)을 효율적으로 표시하는 데 사용됩니다. 화면에 표시되는 항목만 렌더링하므로 리소스와 메모리가 절약됩니다.
  • lazyPagingItems 객체는 LazyColumn 내에서 페이징된 데이터의 로드 및 표시를 효율적으로 관리합니다. LazyPagingItems를 LazyColumn 컴포저블의 items에 전달합니다.
  • MessageRow(message: Text)는 개별 메시지 항목을 렌더링하는 역할을 하며, 카드 내에 메시지의 발신자와 텍스트를 표시할 수 있습니다.
  • MessagePlaceholder()는 실제 메시지 데이터를 가져오는 동안 시각적 플레이스홀더(로드 스피너)를 제공하여 사용자 환경을 개선합니다.

이 가이드가 포함된 컬렉션

이 가이드는 더 광범위한 Android 개발 목표를 다루는 선별된 빠른 가이드 모음의 일부입니다.

목록과 그리드를 사용하면 앱에서 사용자가 쉽게 사용할 수 있는 시각적으로 보기 좋은 형식으로 컬렉션을 표시할 수 있습니다.
구성 가능한 함수를 사용하여 Material Design 디자인 시스템을 기반으로 아름다운 UI 구성요소를 쉽게 만드는 방법을 알아봅니다.
이 동영상 시리즈에서는 다양한 Compose API를 소개하고, 사용 가능한 API와 사용 방법을 빠르게 보여줍니다.

궁금한 점이나 의견이 있나요?

자주 묻는 질문(FAQ) 페이지로 이동하여 빠른 가이드를 확인하거나 Google에 의견을 보내주세요.