ページング ライブラリの概要 (original) (raw)

ページング ライブラリの概要 Android Jetpack の一部。

ページング ライブラリを使用すれば、大規模なデータセットからデータのページをローカル ストレージやネットワーク経由で読み込んで表示できます。このアプローチにより、アプリはネットワーク帯域幅とシステム リソースの両方をより効率的に使用できます。ページング ライブラリのコンポーネントは、推奨の Android アプリ アーキテクチャに適合し、他の Jetpack コンポーネントと正常に統合され、充実した Kotlin サポートを提供するように設計されています。

ページング ライブラリを使用する利点

ページング ライブラリには以下の機能があります。

設定

Paging コンポーネントを Android アプリにインポートするには、次の依存関係をアプリの build.gradle ファイルに追加します。

Kotlin

dependencies { val paging_version = "3.4.2"

implementation("androidx.paging:paging-common:$paging_version")

// Jetpack Compose integration implementation("androidx.paging:paging-compose:$paging_version") }

Groovy

dependencies { def paging_version = "3.4.2"

implementation "androidx.paging:paging-common:$paging_version"

// Jetpack Compose integration implementation "androidx.paging:paging-compose:$paging_version" }

ライブラリのアーキテクチャ

ページング ライブラリ コンポーネントは、アプリの 3 つのレイヤで動作します。

リポジトリ レイヤの PagingSource または RemoteMediator コンポーネントから、ViewModel レイヤの Pager コンポーネントにページングされたデータフローを示す画像。
    その後、Pager コンポーネントが PagingData のフローを UI レイヤの遅延レイアウト コンポーネントに公開します。

**図 1.**ページング ライブラリがアプリのアーキテクチャにどのように適合するかを示す例。

このセクションでは、各レイヤで動作するページング ライブラリ コンポーネントについて、およびそれらがどのように連携してページング データの読み込みと表示を行うかについて説明します。

リポジトリ レイヤ

リポジトリ レイヤのメインのページング ライブラリ コンポーネントは PagingSource です。各 PagingSource オブジェクトは、データのソースと、そのソースからデータを取得する方法を定義します。PagingSource オブジェクトを使用すると、ネットワーク ソースやローカル データベースなど、任意の単一ソースからデータを読み込めます。

他に使用可能なページング ライブラリ コンポーネントには、RemoteMediator があります。RemoteMediator オブジェクトは、ローカル データベース キャッシュを使用するネットワーク データソースなど、階層化されたデータソースからのページングを処理します。

ViewModel レイヤ

Pager コンポーネントは、PagingSource オブジェクトと PagingConfig 構成オブジェクトに基づき、リアクティブ ストリームで公開される PagingData のインスタンスを構築するための公開 API を提供します。

ViewModel レイヤを UI に接続するコンポーネントは、PagingData です。PagingData オブジェクトは、ページ分けされたデータのスナップショットを格納するコンテナです。PagingSource オブジェクトに対してクエリを実行し、結果を保存します。

UI レイヤ

主要な Paging UI API は collectAsLazyPagingItems() です。この API は、ページ分けされたアイテムをデータのリストとして公開します。このリストは、Compose の遅延レイアウト コンポーネント(LazyColumnLazyRow など)で簡単に使用できます。

androidx.paging:paging-compose ライブラリを追加すると、Compose 互換の API を使用できます。この API を使用すると、アダプターや差分ロジックを使用しなくても、UI がデータの読み込み、更新、エラーに自動的に反応します。collectAsLazyPagingItems() 拡張関数を Flow<PagingData> で使用して、返された LazyPagingItemsitems()LazyColumn に渡します。

@Composable fun MessageList(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()
        }
    }
}

}

詳細については、大規模なデータセット(ページング)をご覧ください。

あなたへのおすすめ