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

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

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

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

  • ページング データに対するメモリ内キャッシュ。アプリがページング データを操作しながら、システム リソースを効率的に使用できるようにします。
  • 組み込みのリクエスト重複除去。アプリでネットワーク帯域幅とシステム リソースを効率的に使用できるようにします。
  • 読み込まれたデータの一番下までスクロールすると、データが自動的にリクエストされる構成可能な RecyclerView アダプター。
  • Kotlin のコルーチンとフロー、LiveData、RxJava に関するサポート。
  • 更新機能や再試行機能など、エラー処理の組み込みサポート。

フィードバックを送信

お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

フィードバックの送信について詳しくは、Issue Tracker のドキュメントをご覧ください。

セットアップ

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

Groovy

dependencies {
  def paging_version = "3.2.1"

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

  // alternatively - without Android dependencies for tests
  testImplementation "androidx.paging:paging-common:$paging_version"

  // optional - RxJava2 support
  implementation "androidx.paging:paging-rxjava2:$paging_version"

  // optional - RxJava3 support
  implementation "androidx.paging:paging-rxjava3:$paging_version"

  // optional - Guava ListenableFuture support
  implementation "androidx.paging:paging-guava:$paging_version"

  // optional - Jetpack Compose integration
  implementation "androidx.paging:paging-compose:3.3.0-alpha05"
}

Kotlin

dependencies {
  val paging_version = "3.2.1"

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

  // alternatively - without Android dependencies for tests
  testImplementation("androidx.paging:paging-common:$paging_version")

  // optional - RxJava2 support
  implementation("androidx.paging:paging-rxjava2:$paging_version")

  // optional - RxJava3 support
  implementation("androidx.paging:paging-rxjava3:$paging_version")

  // optional - Guava ListenableFuture support
  implementation("androidx.paging:paging-guava:$paging_version")

  // optional - Jetpack Compose integration
  implementation("androidx.paging:paging-compose:3.3.0-alpha05")
}

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

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

  • リポジトリ レイヤ
  • ViewModel レイヤ
  • UI レイヤ
リポジトリ レイヤの PagingSource または RemoteMediator コンポーネントから、ViewModel レイヤの Pager コンポーネントにページングされたデータフローを示す画像。
    その後、Pager コンポーネントが PagingData のフローを UI レイヤの PagingDataAdapter に公開します。
図 1. ページング ライブラリがアプリのアーキテクチャにどのように適合するかを示す例。

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

リポジトリ レイヤ

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

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

ViewModel レイヤ

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

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

UI レイヤ

UI レイヤのメインのページング ライブラリ コンポーネントは PagingDataAdapter です。これは、ページ分けされたデータを処理する RecyclerView アダプターです。

付属の AsyncPagingDataDiffer コンポーネントを使用して、独自のカスタム アダプターを作成することもできます。

参考情報

ページング ライブラリについて詳しくは、以下の参考情報をご覧ください。

Codelab

サンプル