リストとページングを使用してデータを遅延読み込みする

遅延読み込みと 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 内のページングされたデータの読み込みと表示を効率的に管理します。LazyColumn コンポーザブルの items に LazyPagingItems を渡します。
  • MessageRow(message: Text) は、個々のメッセージ アイテムのレンダリングを担当し、メッセージの送信者とテキストを Card 内に表示します。
  • MessagePlaceholder() は、実際のメッセージ データの取得中に視覚的なプレースホルダ(読み込みスピナー)を表示し、ユーザー エクスペリエンスを向上させます。

このガイドを含むコレクション

このガイドは、Android デベロッパーの幅広い目標をカバーする、厳選されたクイックガイド コレクションの一部です。

リストとグリッドを使用すると、アプリでコレクションを視覚的にわかりやすい形式で表示できるため、ユーザーが簡単に利用できるようになります。
コンポーズ可能な関数を使用して、マテリアル デザイン システムに基づく美しい UI コンポーネントを簡単に作成する方法を学びます。
この一連の動画では、さまざまな Compose API を紹介し、利用可能な API とその使用方法を簡単に説明します。

ご不明な点やフィードバックがある場合

よくある質問のページにアクセスして、クイックガイドをご覧ください。また、ご意見やご感想をお寄せください。