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

Paging

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

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

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

依存関係の宣言

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-beta01"

  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"

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

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

フィードバック

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

新しい問題を報告する

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

Paging Compose バージョン 1.0.0

バージョン 1.0.0-alpha07

2021 年 2 月 10 日

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

Compose alpha12 と統合するための更新を行いました。

バージョン 1.0.0-alpha06

2021 年 1 月 28 日

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

バグの修正

Compose 1.0.0-alpha11 に依存するよう更新しました。

バージョン 1.0.0-alpha05

2021 年 1 月 13 日

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

Compose 1.0.0-alpha10 に依存するよう更新しました。

バージョン 1.0.0-alpha04

2020 年 12 月 16 日

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

バグの修正

  • コンビニエンス プロパティ CombinedLoadStates.refreshCombinedLoadStates.prependCombinedLoadStates.append が更新され、リモート更新が確実に適用されるように、メディエータとソースの両方の読み込み状態が NotLoading になった後で初めて Loading から NotLoading に移行するようになりました。(I65619

バージョン 1.0.0-alpha03

2020 年 12 月 2 日

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

  • Compose 1.0.0-alpha08 に合わせて更新しました。

バージョン 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-beta01

2021 年 2 月 10 日

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

API の変更

  • Rx2 と Rx3 のラッパーは、依存する試験運用版のアノテーションを公開するようになりました。paging-rxjava2 または paging-rxjava3 で Rx 互換ラッパーを使用している場合は、使用箇所に @OptIn(ExperimentalCoroutinesApi::class) でアノテーションを付ける必要があります。(Ib1f9d

バグの修正

  • 互換性パスを介して v2 DataSource API を使用すると IndexOutOfBoundsException: Inconsistency detected がスローされることがあるという問題を修正しました。
  • 互換性パスを介して使用する DataSource を初期化する際の isInvalid 呼び出しが、メインスレッドではなく、正しく fetchDispatcher で起動されるようになりました。これにより、Room の PagingSource 実装を使用する場合にメインスレッド上の Db アクセスによって IllegalStateException が発生する問題が解決します。

バージョン 3.0.0-alpha13

2021 年 1 月 27 日

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

API の変更

  • PagingSource.getRefreshKey は実装のオプションではなくなり、デフォルト実装がない抽象関数になりました。移行中のユーザーは、引き続きデフォルト実装を返す(単に null を返す)こともできますが、getRefreshKey() には、ユーザーの現在のスクロール位置に基づいてキーを返す実際の実装が必要です。これにより、可能であれば PagingState.anchorPosition を介してビューポートを中心に Paging で読み込みを続行できます。(I4339a
  • InvalidatingPagingSourceFactory が最終クラスになりました。(Ia3b0a
  • 追加でオプションの SeparatorType パラメータを使用して、ターミナル セパレータ(ヘッダー / フッター)の動作を設定できます。次の 2 つのオプションがあります。
    • FULLY_COMPLETE - 既存の動作。PagingSource と RemoteMediator の両方が endOfPaginationReached をマークするまで待機してから、ターミナル セパレータを追加します。RemoteMediator を使用しない場合、リモートの loadState は無視されます。これは主に、リモートソース(ネットワークなど)からの取得を含め、セクションが完全に読み込まれたときにのみセクション セパレータを表示する場合に便利です。
    • SOURCE_COMPLETE - RemoteMediator が使用されている場合であっても、単に、PagingSource が endOfPaginationReached をマークするまで待機します。これにより、ヘッダーとフッターが初期読み込みと同期して表示されるため、ユーザーはスクロールしてターミナル セパレータを確認する必要がなくなります。(Ibe993b/174700218

バグの修正

  • PageFetcher が PagingSource から読み込みを開始する前に PagingSource が無効にされると発生する、まれなメモリリークを修正しました。(I9606bb/174625633

バージョン 3.0.0-alpha12

2021 年 1 月 13 日

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

API の変更

  • InvalidatingPagingSourceFactory は抽象メソッドを持たないため、抽象クラスではなくなりました。(I4a8c4
  • Java ユーザー向けに、Lifecycle または CoroutineScope の代わりに ViewModel を受け入れる .cachedIn() のオーバーロードを追加しました。(I97d81b/175332619
  • 変換演算子の引数に Executor を受け入れることで、Java 呼び出し元が PagingData 変換オペレーションを非同期的に使用できるようにしました。すべての -Sync 変換演算子から -Sync サフィックスが削除されました。Kotlin Coroutine ユーザーは、代わりに停止中のブロックを受け入れる拡張関数を呼び出すことで、あいまいさを排除する必要があります。 PagingData 変換演算子はすべて、静的 PagingDataTransforms クラスの拡張機能に移動されました。Java ユーザーは、静的ヘルパー(PagingDataTransforms.map(pagingData, transform) など)を介してそれらを呼び出す必要があります。Kotlin ユーザーは、構文は同じですが、関数をインポートする必要があります。(If6885b/172895919

バグの修正

  • すでにページ分けの最後に到達していると adapter.refresh() 中に RemoteMediator.load() が呼び出されないバグを修正しました。

バージョン 3.0.0-alpha11

2020 年 12 月 16 日

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

新機能

  • 以下の基本的なユースケースについて、保存済み状態のサポートが追加されました(特にレイヤ化されたソースの場合の完全なサポートは、まだ構築中です)。
    • フローがキャッシュに保存され、アプリが中止されていない(たとえば、フローがビューモデルでキャッシュに保存され、アクティビティがプロセスで再作成されている)場合。
    • ページング ソースがカウントされ、プレースホルダが有効化され、レイアウトが交互配置されていない場合。

API の変更

  • PagingSource.getRefreshKey() が安定版 API になりました(I22f6fb/173530980
  • PagingSource.invalidate がオープン関数ではなくなりました。無効化が発生したときに通知を受け取る必要がある場合は、invalidate をオーバーライドする代わりに registerInvalidatedCallback メソッドを呼び出すことを検討してください。(I628d9b/173029013b/137971356
  • Pager は、オプトイン アノテーションを介して試験運用版の API を試験運用版でないパブリック API にリークせず、通常のコンストラクタと合わせて単一の試験運用版コンストラクタを持つようになりました。(I9dc61b/174531520
  • コンビニエンス プロパティ CombinedLoadStates.refreshCombinedLoadStates.prependCombinedLoadStates.append が更新され、リモート更新が確実に適用されるように、メディエータとソースの両方の読み込み状態が NotLoading になった後で初めて Loading から NotLoading に移行するようになりました。(I65619
  • LoadParams.pageSize が削除されました(サポートはすでに終了しています)。PagingSource では LoadParams.loadSize を使用することをおすすめします。

    PagingConfig.initialLoadSize と等価の初回読み込み呼び出しを除いて、LoadParams.loadSize は常に PagingConfig.pageSize と等価になりました。

    Pager または PagedList を使用せずに Paging2 DataSource をテストする場合、initialLoadSize も設定していると、pageSizePagingConfig.pageSize と一致しないことがあります。このテストが重要な場合は、Pager / PagedList を使用してください。これらは、DataSource 読み込みメソッドに対して正しい PageSize を内部的に設定します。(I98ac7b/149157296

バグの修正

  • PagingConfig.maxSize を設定してセパレータを使用したときの IllegalStateException によるクラッシュを修正しました。(I0ed33b/174787528
  • RemoteMediator が設定されている場合、初回読み込みの後で PREPEND / APPEND の読み込み状態がすぐに NotLoading(endOfPaginationReached = true) に更新されないバグを修正しました(I8cf5a
  • .snapshot() や .peek() などのプレゼンター側の API が、ListUpdateCallback の更新で以前の(古い)リストを返すバグを修正しました。
  • セパレータ演算子を RemoteMediator と併用したときにヘッダーまたはフッターが追加されないバグを修正しました。
  • RemoteMediator で LoadState を NotLoading に更新すると、Loading 状態のまま止まってしまうバグを修正しました。
  • Paging2.0 互換 API である .asPagingSourceFactory() により、誤った CoroutineDispatcher でバッキング DataSource が初期化されるバグを修正しました。これにより、特に Room の現在の PagingSource 実装(この互換性パスを使用します)を利用している場合に、クラッシュと潜在的な ANR の問題が解決されます。

バージョン 3.0.0-alpha10

2020 年 12 月 2 日

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

API の変更

  • サポートが終了している dataRefreshFlow API と dataRefreshListener API は、loadStateFlow / Listener の更新と重複するため、削除されました。移行する場合、loadStateFlow に相当するコードは次のようになります。

    loadStateFlow.distinctUntilChangedBy { it.refresh }
        .filter { it.refresh is NotLoading }
    

    Ib5570b/173530908

バグの修正

  • RemoteMediator REFRESH の endOfPaginationReached が LoadState の更新に正しく伝播され、リモートの APPENDPREPEND がトリガーされなくなりました。(I94a3fb/155290248
  • 最初のページが空であるかフィルタリング条件が厳しいために空のリストが提示されても、Paging は PREPEND または APPEND の読み込みを開始できるようになりました。(I3e702b/168169730
  • 無効化が急に発生すると、その後の PagingSource の生成で getRefreshKey が呼び出されない問題を修正しました。(I45460b/170027530

外部からの協力

  • .invalidate() API 用に新しい抽象クラス InvalidatingPagingSourceFactory が追加されました。これにより、生成されるすべての PagingSource に invalidate を転送できます。@claraf3 に感謝いたします。(Ie71fcb/160716447

既知の問題

  • RemoteMediator を使用したとき、.insertSeparators() 変換のヘッダーとフッターがすぐに表示されないことがあります。b/172254056
  • RemoteMediator を使用すると、RemoteMediator.load() が結果を返す前に無効化と PagingSource.load(LoadParams.Refresh(...)) が完了した場合、リモートの LoadState が止まってしまうことがあります。b/173717820

バージョン 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