Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

Paging

Paging ライブラリを使用すると、アプリの RecyclerView 内でデータを段階的かつ適切に読み込むことが容易になります。

androidx.paging グループ内のすべてのアーティファクトのリストを以下に示します。

アーティファクト 現在の安定版リリース 次のリリース候補 ベータ版リリース アルファ版リリース
paging-* 2.1.2 - - 3.0.0-alpha09
paging-compose - - - 1.0.0-alpha02
このライブラリの最終更新日: 2020 年 11 月 11 日

依存関係の宣言

Paging への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。

アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。

    dependencies {
      def paging_version = "2.1.2"

      implementation "androidx.paging:paging-runtime:$paging_version" // For Kotlin use paging-runtime-ktx

      // alternatively - without Android dependencies for testing
      testImplementation "androidx.paging:paging-common:$paging_version" // For Kotlin use paging-common-ktx

      // optional - RxJava support
      implementation "androidx.paging:paging-rxjava2:$paging_version" // For Kotlin use paging-rxjava2-ktx
    }
    

Kotlin 拡張機能の使用方法については、ktx のドキュメントをご覧ください。

または、Paging 3.0 のアルファ版リリースをお試しください。Paging 3.0 を使用するには、代わりに次の依存関係を build.gradle ファイルに追加します。

dependencies {
  def paging_version = "3.0.0-alpha07"

  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 - Guava ListenableFuture support
  implementation "androidx.paging:paging-guava:$paging_version"

  // Jetpack Compose Integration
  implementation "androidx.paging:paging-compose:1.0.0-alpha01"
}

依存関係について詳しくは、ビルド依存関係の追加をご覧ください。

フィードバック

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

新しい問題を報告する

詳細については、Issue Tracker のドキュメントをご覧ください。

Paging Compose バージョン 1.0.0

バージョン 1.0.0-alpha02

2020 年 11 月 11 日

androidx.paging:paging-compose:1.0.0-alpha02 がリリースされました。バージョン 1.0.0-alpha02 に含まれるコミットについては、こちらをご覧ください。

API の変更

  • .peek().snapshot().retry().refresh() メソッドを LazyPagingItem に追加しました。これは AsyncPagingDataDiffer / PagingDataAdapter で利用できるものと同じ機能を公開します。(Iddfe8b/172041660

バージョン 1.0.0-alpha01

2020 年 10 月 28 日

androidx.paging:paging-compose:1.0.0-alpha01 がリリースされました。バージョン 1.0.0-alpha01 に含まれるコミットについては、こちらをご覧ください

新機能

paging-compose アーティファクトは、Paging ライブラリJetpack Compose との統合を提供します。簡単な使用例を以下に示します。

  @Composable
  @OptIn(ExperimentalLazyDsl::class)
  fun ItemsDemo(flow: Flow<PagingData<String>>) {
      val lazyPagingItems = flow.collectAsLazyPagingItems()
      LazyColumn {
          items(lazyPagingItems) {
              Text("Item is $it")
          }
      }
  }

バージョン 3.0.0

バージョン 3.0.0-alpha09

2020 年 11 月 11 日

androidx.paging:paging-*:3.0.0-alpha09 がリリースされました。バージョン 3.0.0-alpha09 に含まれるコミットについては、こちらをご覧ください。

API の変更

  • replaceWith 句を使用した dataRefreshFlow / Listener メソッドのサポートを完全に終了しました。(I6e2dd

バグの修正

  • RemoteMediator で区切り文字を使用していると IllegalArgumentException がスローされ、endOfPagination を返すリモートロードがまだ動作している間に無効化がトリガーされる問題を修正しました。(I3a260

バージョン 3.0.0-alpha08

2020 年 10 月 28 日

androidx.paging:paging-*:3.0.0-alpha08 がリリースされました。バージョン 3.0.0-alpha08 に含まれるコミットについては、こちらをご覧ください

API の変更

  • DataSource.InvalidatedCallback の Kotlin と Java のバリアントは、機能インターフェース(Kotlin 1.4 で利用可能)を介して Kotlin で SAM 変換を有効にすることにより統合されました。これにより、.map または .mapByPage による変換後に kotlin バリアントの無効化コールバックが呼び出されないバグも修正されました。(I1f244b/165313046

バグの修正

  • Paging と ViewPager のインタラクションが大幅に改善されました。具体的には、Paging ではページの無効化を理由とした RemoteMediator#load の呼び出しをキャンセルしなくなりました。また、REFRESH が必要な場合、REFRESH リクエストが正常に完了するまで、先頭または最後での読み込みリクエストも行わなくなりました。I6390bb/162252536
  • MissingGetterMatchingBuilder の API lint チェックが androidx で有効になりました(I4bbeab/138602561
  • バックグラウンド スレッドからの RecyclerView の通知が原因で .withLoadState*ConcatAdapter ヘルパーがクラッシュするバグを修正しました(I18bb5b/170988309
  • 極めて小さな非空白ページの読み込みにおいて、プリフェッチで読み込みが正常にトリガーされないことがあるバグを修正しました(Iffda3b/169259468

バージョン 3.0.0-alpha07

2020 年 10 月 1 日

androidx.paging:paging-*:3.0.0-alpha07 がリリースされました。バージョン 3.0.0-alpha07 に含まれるコミットについては、こちらをご覧ください

API の変更

  • 非同期の Guava ベースの PagingData 演算子で、Executor をパラメータとして受け取り、実行コンテキストを制御できるようになりました。(Id4372

バグの修正

  • 競合状態が原因で RemoteMediator でスローされる IndexOutOfBounds 例外を修正しました。(I00b7fb/165821814
  • DataSource から PagingSource への変換における競合状態により、PagingSource で DataSource の無効化シグナルが無視される可能性がある問題を修正しました。
  • ページ取得ロジックにおいて、PagingDataAdapter.refresh() が呼び出されるまで PagingSource の新しい生成を取得できない可能性がある問題を修正しました
  • PagingSource に変換された DataSource(Room によって生成されたものなど)を RemoteMediator と組み合わせて使用する際にスクロール位置が失われる場合がある問題を修正しました。

外部からの協力

  • PagingData の RxJava2、RxJava3、Guava ベースの非同期変換演算子の追加に協力してくださった @simonschiller に感謝いたします。

バージョン 3.0.0-alpha06

2020 年 9 月 2 日

androidx.paging:paging-*:3.0.0-alpha06 がリリースされました。バージョン 3.0.0-alpha06 に含まれるコミットについては、こちらをご覧ください

API の変更

  • PagingDataAdapter.setHasStableIds が呼び出されるたびに UnsupportedOperationException がスローされ、固定 ID がサポートされていないことが明確に示されます。(Ib3890b/158801427

バグの修正

  • 空白のページが多数挿入された場合でも insertSeparators が空白のページを除外しなくなり、プレゼンターがプリフェッチの距離に準拠するようになりました。(I9cff6b/162538908

バージョン 3.0.0-alpha05

2020 年 8 月 19 日

androidx.paging:paging-*:3.0.0-alpha05 がリリースされました。バージョン 3.0.0-alpha05 に含まれるコミットについては、こちらをご覧ください

バグの修正

  • Paging は、提示されるデータがかなりフィルタリングされている場合でも、ページのプリフェッチを正しく行うようになりました。
  • 読み込みの再試行に対して LoadResult.Error を返しても、アイテム アクセスが誤って再試行を再びトリガーすることはなくなりました。

外部からの協力

  • テストのクリーンアップにご協力いただいた Clara F 氏に感謝いたします。(549612

バージョン 3.0.0-alpha04

2020 年 8 月 5 日

androidx.paging:paging-*:3.0.0-alpha04 がリリースされました。バージョン 3.0.0-alpha04 に含まれるコミットについては、こちらをご覧ください

API の変更

  • peek() API が AsyncPagingDataDifferPagingDataAdapter に追加され、ページの読み込みをトリガーせずに、提示されるデータにアクセスできるようになりました(I38898b/159104197
  • snapshot() API が PagingDataAdapterAsyncPagingDataDiffer に追加され、ページの取得をトリガーせずに、提示されるアイテムを取得できるようになりました(I566b6b/159104197
  • PagingData.from(List<T>) コンストラクタが追加され、静的リストを提示できるようになりました。このリストを PagingData フロー全体と組み合わせて、特定の状態(初期 REFRESH が終了する前や変換テスト用など)で静的リストを表示できます(Id134d
  • dataRefresh フロー / Listener API はサポートが終了されます。これらは、提示されたアイテムの状態を REFRESH 時に公開するためのものですが、loadState フロー / Listener コールバックのタイミングと itemCount プロパティの改善により、不要になりました(Ia19f3
  • PagingSourceRemoteMediator の RxJava3 互換ラッパーが追加されました(I49ef3b/161480176

バグの修正

  • toPagingSourceFactory ヘルパーを介して PagingSource に変換される PositionalDataSource(Room によって生成されるPagingSource を含む)がジャンプをサポートするようにそれ自体を正しくマークするようになりました(I3e84cb/162161201
  • submitData の同期バリアントを使用すると、場合によって競合が発生し、ClosedSendChannelException の原因となるバグを修正しました(I4d702b/160192222

外部からの協力

  • Slack に代わり、RxJava3 互換ラッパーの追加に協力してくださった Zac Sweers 氏に感謝いたします(I49ef3b/161480176

バージョン 3.0.0-alpha03

2020 年 7 月 22 日

androidx.paging:paging-*:3.0.0-alpha03 がリリースされました。バージョン 3.0.0-alpha03 に含まれるコミットについては、こちらをご覧ください

API の変更

  • PagingState のコンストラクタが一般公開され、getRefreshKey() の実装のテストが簡単になりました(I8bf15
  • 元のバリアントと kotlin バリアントとの曖昧さを解消するため、Java から DataSource kotlin マップが非表示になりました(If7b23b/161150011
  • Kotlin ユーザーの便宜性を目的とする冗長な API が @JvmSynthetic とマークされました(I56ae5
  • itemsBefore と itemsAfter をデフォルトで COUNT_UNDEFINED に設定する LoadResult.Page のコネクタにオーバーロードが追加されました(I47849
  • 既存の PagingData 演算子に停止中メソッドを受け入れされ、Java ユーザー向けの新しい mapSync、flatMapSync、filterSync の非停止演算子を導入しました。既存の変換メソッドは拡張関数に移行されたため、Kotlin ユーザーはインポートする必要があります(I34239b/159983232

バグの修正

  • Room(および PositionalDataSource)の PagingSource に、最初のページの一部として先頭の区切り文字が表示され、ユーザーがスクロールして表示する必要がなくなりました(I6f747b/160257628
  • PagingData.filter() による変換後、リクエストされたインデックスと一致するページが返されるまで、プレースホルダ上のアイテム アクセスが PagingSource 読み込みを正しくトリガーするようになりました(I95625b/158763195
  • PagingSource からエラーが返された後でスクロールすると PagingDataAdapter.retry() が再試行できなくなることがあるバグを修正しました(I1084fb/160194384
  • ページを削除した後のアイテム アクセスではページは読み込まれないのにアイテム アクセスが prefetchDistance 内にあった問題を修正しました(Ie95aeb/160038730
  • PagingConfig.maxSize を設定しても、削除イベント後にプレースホルダが有効にならなくなりました(I2be29b/159667766

バージョン 3.0.0-alpha02

2020 年 6 月 24 日

androidx.paging:paging-*:3.0.0-alpha02 がリリースされました。バージョン 3.0.0-alpha02 に含まれる commit については、こちらをご覧ください

API の変更

  • PagingConfig のコンストラクタに一般的なデフォルト値を持つオーバーロードを追加しました(I39c50b/158576040)。
  • PagingDataAdapterAsyncPagingDataDiffer のコンストラクタに一般的なデフォルト値を持つオーバーロードを追加しました(Ie91f5)。
  • アダプタ API の dataRefreshFlowdataRefreshListener では、PagingData が空かどうかを示すブール値を渡すようになりました(I6e37eb/159054196)。
  • RemoteMediator 用の RxJava API と Guava API である RxRemoteMediatorListenableFutureRemoteMediator を追加しました。
  • isEmpty()firstItemOrNull() などの一般的なアイテムへのアクセス用に PagingState にヘルパーを追加しました(I3b5b6b/158892717)。

バグの修正

  • 無効な PagingSource を誤って再利用しないように(不明確なエラーが発生していました)、Pager はファクトリで PagingSource の再利用をチェックするようになりました(I99809b/158486430)。
  • RemoteMediator REFRESH でエラーが発生して PagingSource の読み込みを妨げることはなくなりました(I38b1bb/158892717)。
  • submitData の非 suspend バージョンは、submitData の suspend バージョンの後に呼び出された場合に複数の PagingData の同時収集が原因でクラッシュを引き起こすことがなくなりました。(I26358b/158048877
  • 設定の変更後に発生する可能性のある「ページャーから 2 回収集できない」例外を修正しました(I58bccb/158784811)。

バージョン 3.0.0-alpha01

2020 年 6 月 10 日

androidx.paging:paging-*:3.0.0-alpha01 がリリースされました。バージョン 3.0.0-alpha01 に含まれるコミットについては、こちらをご覧ください

Paging ライブラリが 3.0 にアップデートされ、いくつかの重要な新機能が有効になりました。

3.0 の新機能

既知の問題

  • Paging 3 の javadoc はまだ利用できません。当面は、上記のリンク先のガイドまたは Kotlin ドキュメントをご利用ください。(b/158614050

バージョン 2.1.2

バージョン 2.1.2

2020 年 3 月 18 日

androidx.paging:paging:2.1.2 がリリースされました。バージョン 2.1.2 に含まれる 2.1.0 に対するコミットについては、こちらをご覧ください

バグの修正

  • 無効化中に位置を変換する際にまれに発生する IndexOutOfBoundsException を修正しました。

リリースの問題

  • Paging バージョン 2.1.1 が誤って構成されたブランチから誤ってリリースされていたため、部分的に実装された API と機能が今後のリリースで公開されます。

  • Paging 2.1.2 には、2.1.1 で最初にリリースされた負荷中心の修正が含まれていますが、今回は 2.1.0 リリースの上から正しく選択されています。現在 2.1.1 をお使いの場合は、このリリースにアップグレードすることを強くおすすめします。

バージョン 2.1.1

バージョン 2.1.1

2019 年 12 月 18 日

androidx.paging:paging-*:2.1.1 がリリースされました。バージョン 2.1.1 に含まれるコミットについては、こちらをご覧ください

バグの修正

  • プレースホルダが無効になっている場合、PositionalDataSources からの連続した初期読み込みが、最後のアクセスを中心に行われるようになりました。

バージョン 2.1.0

バージョン 2.1.0

2019 年 1 月 25 日

Paging 2.1.0 がリリースされました。2.1.0-rc01 からの変更はありません。

バージョン 2.1.0-rc01

2018 年 12 月 6 日

Paging 2.1.0-rc01 がリリースされました。2.1.0-beta01 からの変更はありません。

バージョン 2.1.0-beta01

2018 年 11 月 1 日

Paging 2.1.0-beta01 がリリースされました。2.1.0-alpha01 からの変更はありません。

バージョン 2.1.0-alpha01

2018 年 10 月 12 日

Paging 2.1.0-alpha01 では、2 つの重要な機能(ページ削除機能と、すべてのアーティファクトを対象とした KTX 拡張ライブラリ)が追加されています。また、API の変更とバグの修正も行われています。

API の変更

  • PagedList.Config.Builder.setMaxSize() が追加されました。このメソッドにより、メモリに読み込むアイテムの数を制限できます。
  • androidx.paging.Config()PagedList.Config.Builder に代わる Kotlin のオプションとして追加されました。
  • androidx.paging.PagedList()PagedList.Builder に代わる Kotlin のオプションとして追加されました。
  • DataSourceFactory.toLiveData()LivePagedListBuilder に代わる Kotlin のオプションとして追加されました。
  • DataSourceFactory.toObservable()toFlowable()RxPagedListBuilder に代わる Kotlin のオプションとして追加されました。
  • PagedList が交換されるタイミングをリッスンするための AsyncPagedListDiffer.addPagedListListener() が追加されました。b/111698609
  • 新旧のリストを渡す PagedListAdapter.onCurrentListChanged() のバリアントが追加され、以前のバリアントは非推奨になりました。
  • PagedListAdapter/AsyncPagedListDiffer.submitList() のバリアントが追加されました。このバリアントは、比較した後に PagedList を表示する場合にトリガーされる追加のコールバックを受け取ります。これにより、PagedList の交換を他の UI の更新と同期できるようになりました。b/73781068
  • PagedList.getLoadedCount() が追加され、メモリ内のアイテム数を把握できるようになりました。プレースホルダが無効になっている場合、戻り値は常に .size() と等しくなります。

バグの修正

  • リストを再利用する場合に比較を実行するときの競合状態を修正しました。b/111591017
  • インデックスが無効な場合、PagedList.loadAround()IndexOutOfBoundsException をスローするようになりました。以前は、他の不明確な例外により、クラッシュが発生することがありました。
  • データの変更がなく、初期読み込みサイズが非常に小さい場合に、読み込みがそれ以上行われなくなる問題を修正しました。b/113122599

バージョン 2.0.0

バージョン 2.0.0

2018 年 10 月 1 日

Paging 2.0.0 のリリースでは、バグが 1 件修正されています。

バグの修正

  • PositionalDataSource とプレースホルダを使用して非常に高速にスクロールした場合にクラッシュが発生する可能性がある問題を修正しました。b/114635383

バージョン 2.0.0-beta01

2018 年 7 月 2 日

バグの修正

  • 一部の追加のケース(プレースホルダが無効化されている、PositionalDataSource)でコンテンツが表示されない問題を修正しました。b/80149146
  • 1.0.1 ですでにリリース済み)PagedListAdapterAsyncPagedListDiffer が移動イベントを通知できずにクラッシュする問題を修正しました。b/110711937

AndroidX 以前の依存関係

AndroidX 以前のバージョンの Paging では、次の依存関係を含めます。

dependencies {
    def paging_version = "1.0.0"

    implementation "android.arch.paging:runtime:$paging_version"

    // alternatively - without Android dependencies for testing
    testImplementation "android.arch.paging:common:$paging_version"

    // optional - RxJava support
    implementation "android.arch.paging:rxjava2:$paging_version"
}

バージョン 1.0.1

バージョン 1.0.1

2018 年 6 月 26 日

Paging 1.0.1 のリリースでは、runtime のバグが 1 件修正されています。安定性を得るために、1.0.1 を使用することを強くおすすめします。Paging RxJava2 1.0.1 もリリースされています。これは 1.0.0-rc1 とまったく同じです。

バグの修正

  • PagedListAdapterAsyncPagedListDiffer が移動イベントを通知できずにクラッシュする問題を修正しました。b/110711937

RxJava2 バージョン 1.0.0

RxJava2 バージョン 1.0.0-rc1

2018 年 5 月 16 日

Paging RxJava2 1.0.0-rc1 がリリース候補版に移動されています。最初のアルファ版からの変更はありません。

バージョン 1.0.0

バージョン 1.0.0-rc1

2018 年 4 月 19 日: Paging リリース候補版

既知の問題と、Paging 1.0.0 で導入予定の新機能はこれ以上ありません1.0.0-rc1 を使用するようにプロジェクトをアップグレードし、1.0.0 の信頼性を高めるためのバトルテストにご協力ください。

このリリースでは、変更はありません。1.0.0-beta1 と同じです。

バージョン 1.0.0-beta1

2018 年 4 月 5 日

Paging は、リリース候補版に進む前の少しの間、ベータ版が提供される予定です。 Paging 1.0 でのこれ以上の API の変更は予定していません。API の変更に対する制約が非常に大きくなっています。

Paging に対するアルファ版 RxJava2 のサポートが、独立したオプションのモジュールとしてリリースされました(android.arch.paging:rxjava2:1.0.0-alpha1)。安定するまで、一時的に独立してバージョニングされる予定です。

この新しいライブラリには LivePagedListBuilder に代わる RxJava2 が用意されており、ObservableFlowable を作成し、Executor ではなく Scheduler を取得できます。

Kotlin

val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50)
        .setFetchScheduler(myNetworkScheduler)
        .buildObservable()

Java

Observable<PagedList<Item>> pagedItems =
        RxPagedListBuilder(myDataSource, /* page size */ 50)
                .setFetchScheduler(myNetworkScheduler)
                .buildObservable();

新機能

  • 新しい android.arch.paging:rxjava2 アーティファクトを介して RxPagedListBuilder が追加されました。

API の変更

  • ビルダーのエグゼキュータの役割を明確にするために、API が次のように変更されました。

    • setBackgroundThreadExecutor() の名前が setFetchExecutor() に変更されました(PagedList.BuilderLivePagedListBuilder

    • setMainThreadExecutor() の名前が setNotifyExecutor() に変更されました(PagedList.Builder

  • PagedList.mCallbacks メンバーを非公開に修正しました。

バグの修正

  • LivePagedListBuilder は、Arch コンポーネントの IO スレッドプールではなく、指定されたエグゼキュータで、最初の PagedList の読み込みをトリガーするようになりました。

  • 内部の DataSource ラッパー(DataSource.map の実装と、プレースホルダが無効化された PositionalDataSource の読み込みの実装に使用される)での無効な動作を修正しました。b/77237534

バージョン 1.0.0-alpha7

2018 年 3 月 21 日

Paging 1.0.0-alpha7 が Lifecycles 1.1.1 とともにリリースされました。上記のとおり、Paging alpha7 は Function クラスの移動に依存するため、lifecycle:runtime の依存関係を android.arch.lifecycle:runtime:1.1.1 に更新する必要があります。

Paging alpha7 は、Paging がベータ版になる前の最終リリースになる予定です。

API の変更

  • DataSource.LoadParams オブジェクトにパブリック コンストラクタが追加され、DataSource.LoadCallback は抽象オブジェクトになりました。これにより、DataSource をラップする、またはモック コールバックを使用して DataSource を直接テストすることができます。 b/72600421
  • DataSource と DataSource.Factory のマッパー
    • map(Function<IN,OUT>) を使用すると、DataSource で読み込んだ結果を変換、ラップ、装飾することができます。
    • mapByPage(<List<IN>,List<OUT>>) をバッチ処理で実行しても同じ結果が得られるようになりました(たとえば、SQL で読み込んだアイテムで、別のデータベースに対するクエリをさらに実行する必要がある場合、バッチとして実行できます)。
  • PagedList#getDataSource() がコンビニエンス メソッドとして追加されました。b/72611341
  • サポートが終了したすべてのクラスが API から削除されました(recyclerview.extensions パッケージの残り、LivePagedListProvider など)。
  • DataSource.Factory がインターフェースから抽象クラスに変更され、マップ機能を使用できるようになりました。

バグの修正

  • ビルダーを最終版に変更しました。b/70848565
  • Room DataSource の実装が、マルチテーブル クエリを処理するように修正されました。この修正は Room 1.1.0-beta1 に反映されています(上記を参照)。
  • プレースホルダが有効で、合計サイズがページサイズのちょうど倍数である場合に、PositionalDataSourceBoundaryCallback.onItemAtEndLoaded が呼び出されないバグを修正しました。

バージョン 1.0.0-alpha5

2018 年 1 月 22 日

バグの修正

  • プレースホルダが無効のときのページ読み込みを修正しました。b/70573345
  • IllegalArgumentException のバグを見つけるためのログが追加され(b/70360195)、Room 側の理論的な修正も行われました。
  • Javadoc のサンプルコードを修正しました。b/70411933b/71467637