ページング ライブラリの概要 Android Jetpack の一部。
ページング ライブラリを使用すれば、大規模なデータセットからデータのページをローカル ストレージやネットワーク経由で読み込んで表示できます。このアプローチにより、アプリはネットワーク帯域幅とシステム リソースの両方をより効率的に使用できます。ページング ライブラリのコンポーネントは、推奨の Android アプリ アーキテクチャに適合し、他の Jetpack コンポーネントと正常に統合され、充実した Kotlin サポートを提供するように設計されています。
ページング ライブラリを使用する利点
ページング ライブラリには以下の機能があります。
- ページング データに対するメモリ内キャッシュ。アプリがページング データを操作しながら、システム リソースを効率的に使用できるようにします。
- 組み込みのリクエスト重複除去。アプリでネットワーク帯域幅とシステム リソースを効率的に使用できるようにします。
- 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 つのレイヤで動作します。
- リポジトリ レイヤ
ViewModelレイヤ- UI レイヤ
このセクションでは、各レイヤで動作するページング ライブラリ コンポーネントについて、およびそれらがどのように連携してページング データの読み込みと表示を行うかについて説明します。
リポジトリ レイヤ
リポジトリ レイヤのメインのページング ライブラリ コンポーネントは PagingSource です。各 PagingSource オブジェクトは、データのソースと、そのソースからデータを取得する方法を定義します。PagingSource オブジェクトを使用すると、ネットワーク ソースやローカル データベースなど、任意の単一ソースからデータを読み込めます。
他に使用可能なページング ライブラリ コンポーネントには、RemoteMediator があります。RemoteMediator オブジェクトは、ローカル データベース キャッシュを使用するネットワーク データソースなど、階層化されたデータソースからのページングを処理します。
ViewModel レイヤ
Pager コンポーネントは、PagingSource オブジェクトと PagingConfig 構成オブジェクトに基づき、リアクティブ ストリームで公開される PagingData のインスタンスを構築するための公開 API を提供します。
ViewModel レイヤを UI に接続するコンポーネントは、PagingData です。PagingData オブジェクトは、ページ分けされたデータのスナップショットを格納するコンテナです。PagingSource オブジェクトに対してクエリを実行し、結果を保存します。
UI レイヤ
主要な Paging UI API は collectAsLazyPagingItems() です。この API は、ページ分けされたアイテムをデータのリストとして公開します。このリストは、Compose の遅延レイアウト コンポーネント(LazyColumn や LazyRow など)で簡単に使用できます。
androidx.paging:paging-compose ライブラリを追加すると、Compose 互換の API を使用できます。この API を使用すると、アダプターや差分ロジックを使用しなくても、UI がデータの読み込み、更新、エラーに自動的に反応します。
collectAsLazyPagingItems() 拡張関数を Flow<PagingData>
で使用して、返された LazyPagingItems を items() の 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() } } } }
詳細については、大規模なデータセット(ページング)をご覧ください。
あなたへのおすすめ
- 注: JavaScript がオフになっている場合はリンクテキストが表示されます
- ページング データを読み込む、表示する
- Paging 3 に移行する
- ネットワークとデータベースからページングする