Paging
androidx.paging
グループ内のすべてのアーティファクトのリストを以下に示します。
アーティファクト | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
paging-* | 3.3.2 | - | - | - |
paging-compose | 3.3.2 | - | - | - |
依存関係の宣言
Paging への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。
アプリまたはモジュールの build.gradle
ファイルに、必要なアーティファクトの依存関係を追加します。
Groovy
dependencies { def paging_version = "3.3.2" 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.2" }
Kotlin
dependencies { val paging_version = "3.3.2" 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.2") }
Kotlin 拡張機能の使用方法については、ktx のドキュメントをご覧ください。
依存関係について詳しくは、ビルド依存関係の追加をご覧ください。
フィードバック
お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。
詳細については、Issue Tracker のドキュメントをご覧ください。
バージョン 3.3
バージョン 3.3.2
2024 年 8 月 7 日
androidx.paging:paging-*:3.3.2
がリリースされました。バージョン 3.3.2 に含まれる commit については、こちらをご覧ください。
新機能
paging-common
とpaging-testing
に、新しい Kotlin マルチプラットフォーム ターゲット(watchos
、tvos
、linuxArm64
)が追加されました。 (90c9768)、 (53e0eca)
バージョン 3.3.1
2024 年 7 月 24 日
androidx.paging:paging-*:3.3.1
がリリースされました。バージョン 3.3.1 に含まれる commit については、こちらをご覧ください。
バグの修正
AsyncPagingDataDiffer
またはそれを基に構築された API(RecyclerView
で使用されるPagingDataAdapter
など)が、スクロール中にバッキング データソースが更新されたときに、それ以上の読み込みをトリガーできない問題を修正しました。(I60ca5、b/352586078)。PagingDataAdapter
またはAsyncPagingDataDiffer
を使用してRecyclerView
をスクロールしているときにバッキング データソースからアイテムが削除されると発生するクラッシュを修正しました。(I8c65a、b/347649763)。
バージョン 3.3.0
2024 年 5 月 14 日
androidx.paging:paging-*:3.3.0
がリリースされました。バージョン 3.3.0 に含まれる commit については、こちらをご覧ください。
3.2.0 以降の重要な変更
PagingDataPresenter
がパブリック クラスになりました。マルチプラットフォーム プレゼンターを、内部 Paging API やpaging-runtime
のAsyncPagingDataDiffer
を必要とすることなく、PagingDataPresenter
上に構築できるようになりました。LoadStates
がエラー状態かNotLoading
状態かを確認するための新しいLoadStates
ヘルパー メソッドとCombinedLoadStates
ヘルパー メソッドをhasError
とisIdle
に追加しました。また、読み込みがNotLoading
または Error 状態になるまで待機する新しいawaitNotLoading()
Kotlin 拡張メソッドをFlow<CombinedLoadStates>
に追加しました。- カスタム
LoadStates
がコンストラクタに渡されない限り、PagingData.empty()
がデフォルトでNotLoading
状態をディスパッチするようになりました。これは、PagingDataAdapter
への送信時にLoadStates
をディスパッチしない、またはLazyPagingItems
として収集されたときに読み込み状態をディスパッチする既存の動作から逸脱しています。また、LazyPagingItems
として収集されると、最初のコンポジションの直後に空のリストも表示されるようになりました。
Kotlin マルチプラットフォームの互換性
Paging に Kotlin マルチプラットフォームと互換性のあるアーティファクトが追加されました。これは主に、CashApp の multiplatform-paging プロジェクトのアップストリーム作業のおかげです。
paging-common
ですべての Paging 3 API がcommon
に移動され、Android に加えて jvm と iOS でも使用できるようになりました。paging-testing
のコードをcommon
に移動し、Android に加えて jvm と iOS でも使用できるようになりました。paging-compose
のコードをcommon
に移動し、androidx.compose
のマルチプラットフォーム サポートに対応する Android アーティファクトをリリースしました。paging-runtime
、paging-guava
、paging-rxjava2
、paging-rxjava3
は、引き続き Android 版のみとなります。
バージョン 3.3.0-rc01
2024 年 5 月 1 日
androidx.paging:paging-*:3.3.0-rc01
がリリースされました。Paging 3.3.0-beta01 で変更はありません。バージョン 3.3.0-rc01 に含まれるこちらの commit については、
バージョン 3.3.0-beta01
2024 年 4 月 3 日
androidx.paging:paging-*:3.3.0-beta01
がリリースされました。重要な変更はありません。バージョン 3.3.0-beta01 に含まれる commit については、こちらをご覧ください。
バージョン 3.3.0-alpha05
2024 年 3 月 20 日
androidx.paging:paging-*:3.3.0-alpha05
がリリースされました。バージョン 3.3.0-alpha05 に含まれる commit については、こちらをご覧ください。
API の変更
- ページングで、共通コードに AndroidX アノテーションの
@MainThread
アノテーションが使用されるようになりました。(I78f0d、b/327682438)。
バージョン 3.3.0-alpha04
2024 年 3 月 6 日
androidx.paging:paging-*:3.3.0-alpha04
がリリースされました。バージョン 3.3.0-alpha04 に含まれる commit については、こちらをご覧ください。
バグの修正
- Kotlin マルチプラットフォーム互換性の追加に関連する軽微なドキュメント エラーを修正しました。(aosp/2950785)。
バージョン 3.3.0-alpha03
2024 年 2 月 7 日
androidx.paging:paging-*:3.3.0-alpha03
がリリースされました。バージョン 3.3.0-alpha03 に含まれる commit については、こちらをご覧ください。
新機能
PagingDataPresenter
がパブリック クラスになりました。マルチプラットフォーム プレゼンターを、内部 Paging API やpaging-runtime
のAsyncPagingDataDiffer
を必要とすることなく、PagingDataPresenter
上に構築できるようになりました。(Id1f74、b/315214786)。LoadStates
がエラー状態かNotLoading
状態かを確認するための新しいLoadStates
ヘルパー メソッドとCombinedLoadStates
ヘルパー メソッドを追加しました。また、負荷がNotLoading
またはエラー状態になるまでLoadStateFlow
で待機する新しい API も追加しました。(Id6c67)。
動作の変更
- カスタム
LoadStates
がコンストラクタに渡されない限り、PagingData.empty()
がデフォルトでNotLoading
状態をディスパッチするようになりました。これは、PagingDataAdapter
への送信時にLoadStates
をディスパッチしない、またはLazyPagingItems
として収集されたときに読み込み状態をディスパッチする既存の動作から逸脱しています。また、LazyPagingItems
として収集されると、最初のコンポジションの直後に空のリストも表示されるようになりました。(I4d11d、b/301833847)。
バージョン 3.3.0-alpha02
2023 年 9 月 20 日
androidx.paging:paging-*:3.3.0-alpha02
がリリースされました。バージョン 3.3.0-alpha02 に含まれる commit については、こちらをご覧ください。
Kotlin マルチプラットフォームの互換性
Paging に Kotlin マルチプラットフォームと互換性のあるアーティファクトが追加されました。これは主に、CashApp の multiplatform-paging プロジェクトのアップストリーム作業のおかげです。これにより、2 つのリポジトリ間での相違点を回避し、互換性を維持できます。
paging-common
ですべての Paging 3 API がcommon
に移動され、Android に加えて jvm と iOS でも使用できるようになりました。paging-testing
のコードをcommon
に移動し、Android に加えて jvm と iOS でも使用できるようになりました。paging-compose
のコードをcommon
に移動し、androidx.compose
のマルチプラットフォーム サポートに対応する Android アーティファクトをリリースしました。paging-runtime
、paging-guava
、paging-rxjava2
、paging-rxjava3
は、引き続き Android 版のみとなります。
API の変更
- 内部使用のみを目的とする公開 Logger インターフェースが非推奨になりました(I16e95、b/288623117)。
外部からの協力
- (#560、#561、#562、#573、#576、#577、#578、#578、#578#578、#578#578#578。#578#578#578。#578#578。#578#578#578#578#578#578#578#578。
バージョン 3.3.0-alpha01
2023 年 9 月 20 日
- これは、androidx.paging ライブラリの最初のマルチプラットフォーム リリースです。このバージョンには、
*-jvm
アーティファクトと*-android
アーティファクトのみが含まれています。macOS、iOS、Linux のバリアントの場合は、3.3.0-alpha02
を使用します。
バージョン 3.2
バージョン 3.2.1
2023 年 9 月 6 日
androidx.paging:paging-*:3.2.1
がリリースされました。バージョン 3.2.1 に含まれる commit については、こちらをご覧ください。
バグの修正
PagingData.from(List)
を使用してビルドされた Flow が渡されると、Paging テスト アーティファクトのasSnapshot()
API がハングする問題を修正しました。これは、(PagingData.from(List, LoadStates)
オーバーロードとは異なり)asSnapshot()
には読み込み完了時の情報がないためです。この回避策は、完了可能なフロー(flowOf(PagingData.from(...))
など)でのみ機能します。完了できないフロー(MutableStateFlow
の場合は、LoadStates
を提供するPagingData.from
オーバーロードを使用します。(I502c3)。- Paging Compose が内部で
AndroidUiDispatcher.Main
を使用し、読み込み完了時に同じフレームで新しいデータを使用できるようにしました。(Ia55af)。
バージョン 3.2.0
2023 年 7 月 26 日
androidx.paging:paging-*:3.2.0
がリリースされました。バージョン 3.2.0 に含まれる commit については、こちらをご覧ください。
3.1.0 以降の重要な変更
- Paging Compose は API の安定性を達成し、他の Paging に統合され、そのバージョンが他のすべての Paging のアーティファクトと一致するようになりました。3.1.0 以降の変更点:
<ph type="x-smartling-placeholder">
- </ph>
PagingData.from(fakeData)
を作成し、そのPagingData
をMutableStateFlow
でラップすることで、架空のデータのリストをプレビューできるようになりました(例:MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
)。このフローを@Preview
コンポーザブルに渡し、collectAsLazyPagingItems()
のレシーバーとしてプレビューします。LazyVerticalGrid
やHorizontalPager
などのすべての遅延レイアウトと、Wear および TV ライブラリのカスタム遅延コンポーネントをサポートします。これは、新しい下位レベルのLazyPagingItems
拡張メソッドitemKey
とitemContentType
を使用して実現しました。これにより、LazyColumn
やLazyVerticalGrid
用にすでに存在する標準のitems
API やHorizontalPager
などの API の同等の機能にkey
パラメータとcontentType
パラメータを実装できます。LazyListScope
のみをサポートするitems(lazyPagingItems)
とitemsIndexed(lazyPagingItems)
が非推奨になりました。
- 新しい
paging-testing
アーティファクト。アプリの各レイヤの単体テストと、その独立した Paging との統合を中心に設計された API を提供します。たとえば、 <ph type="x-smartling-placeholder">- </ph>
TestPager
クラスを使用すると、Pager や実際の UI から独立して独自のカスタムPagingSource
実装の動作を検証できます。Flow<List<Value>>
または静的List<Value>
を、テストで Pager に渡すことができるPagingSourceFactory
に変換するasPagingSourceFactory
APIFlow<PagingData<Value>>
のasSnapshot
Kotlin 拡張機能。Flow<PagingData<Value>>
を直接List<Value>
に変換します。asSnapshot lambda
を使用すると、scrollTo
やappendScrollWhile
などの API を介してアプリの UI を模倣できるため、ページング データセット内の任意の時点でデータのスナップショットが正しいことを確認できます。
- ページングのデバッグ情報を
VERBOSE
とDEBUG
の 2 つのレベルで公開するためのデフォルトのログを追加しました。ログはadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
コマンドで有効にできます。これは、ビューを使用したページングと Compose を使用したページングの両方に適用されます。 CoroutineDispatcher
の代わりにCoroutineContext
を受け入れるPagingDataAdapter
とAsyncPagingDataDiffer
のコンストラクタを追加しました。- 以前の () よりも明示的な API サーフェスを提供する新しい
PagingSourceFactory
関数インターフェースを追加しました ->PagingSource
ラムダ。このファクトリを使用して、Pager をインスタンス化できます。
バージョン 3.2.0-rc01
2023 年 6 月 21 日
androidx.paging:paging-*:3.2.0-rc01
がリリースされました。バージョン 3.2.0-rc01 に含まれる commit については、こちらをご覧ください。
外部からの協力
バージョン 3.2.0-beta01
2023 年 6 月 7 日
androidx.paging:paging-*:3.2.0-beta01
がリリースされました。バージョン 3.2.0-beta01 に含まれる commit については、こちらをご覧ください。
ページング Compose
- Paging Compose が API の安定性を正式に発表しました。そのため、他のすべての Paging アーティファクトのバージョンと一致するように、バージョンは
1.0.0-alpha20
から更新されました。
API の変更
- サポートが終了した
items(LazyPagingItems)
API とitemsIndexed(LazyPagingItems)
API を Paging Compose から削除しました。代替 API の例については、Paging Compose1.0.0-alpha20
のリリースノートをご覧ください。(I9626e)。
バージョン 3.2.0-alpha06
2023 年 5 月 24 日
androidx.paging:paging-*:3.2.0-alpha06
がリリースされました。バージョン 3.2.0-alpha06 に含まれる commit については、こちらをご覧ください。
新機能
- 既存の
() -> PagingSource
ラムダよりも明示的な API サーフェスを提供する新しいPagingSourceFactory
機能インターフェースを追加しました。このファクトリを使用してPager
をインスタンス化できます。(I33165、b/280655188)。 List<Value>.asPagingSourceFactory()
の新しいpaging-testing
API を追加し、データの不変リストからのみ読み込むPagingSourceFactory
を取得しました。複数世代の静的データでテストする場合は、引き続きFlow<List<Value>>
の既存の拡張機能を使用する必要があります。(Id34d1、b/280655188)。
API の変更
- ページング テストのすべての公開 API に
@VisibleForTesting
アノテーションを付け、これらの API がテストでのみ使用されるようにします。(I7db6e)。 asSnapshot
API では、CoroutineScope
を渡す必要がなくなりました。親スコープから継承されたコンテキストをデフォルトで使用するようになりました。(Id0a78、b/282240990)。- 実際の
Pager
コンストラクタ パラメータの順序に直感的に一致するようにTestPager
コンストラクタ パラメータの順序を変更しました(I6185a)。 - ページング テストでのラムダ型
() -> PagingSource<Key, Value>
の使用をPagingSourceFactory<Key, Value>
型に移行しました。(I4a950、b/280655188)。
動作の変更
asSnapshot
ページング テストを実行するために、メイン ディスパッチャが不要になりました。これを設定しても、テスト動作は変更されません。(Ie56ea)。
バージョン 3.2.0-alpha05
2023 年 5 月 3 日
androidx.paging:paging-*:3.2.0-alpha05
がリリースされました。バージョン 3.2.0-alpha05 に含まれる commit については、こちらをご覧ください。
API の変更
asSnapshot
の Paging Testing API で、loadOperations
パラメータがデフォルトで空のラムダに設定されるようになりました。これにより、読み込みオペレーションを渡さずにasSnapshot
を呼び出し、初期更新読み込みからデータを取得できます。(Ied354、b/277233770)。
ドキュメントの改善
asPagingSourceFactory()
のドキュメントを更新し、これがFlow
の拡張メソッドであり、PagingSource
インスタンスを生成するための再利用可能なファクトリを返すことを明記しました。(I5ff4f、I705b5)。LoadResult.Page
コンストラクタに関するドキュメントを更新し、ジャンプをサポートするためにitemsBefore
とitemsAfter
をオーバーライドする必要があることを明確にしました。(Ied354)。
外部からの協力
- Android/JVM 固有のものから Paging を移行することにご協力いただいた Veyndan 様、ありがとうございます。(#525、#523、#520、#519、#507、#506、#505、 #499、 #497、 #496、 #493)。
バージョン 3.2.0-alpha04
2023 年 2 月 8 日
androidx.paging:paging-*:3.2.0-alpha04
がリリースされました。バージョン 3.2.0-alpha04 に含まれる commit については、こちらをご覧ください。
ページング テスト
paging-testing
アーティファクトに、Pager に渡すためにFlow<List<Value>>
からpagingSourceFactory
を作成するasPagingSourceFactory
メソッドが追加されました。フローから出力される各List<Value>>
は、ページングされたデータの生成を表します。これにより、Pager の収集元となるデータソースを偽装することで、PagingData
変換などでのページング テストが容易になります。(I6f230、b/235528239)paging-testing
アーティファクトが拡張され、Flow<PagingData<T>>
に含まれるデータが正しいことを確認するのに適した新しい API が追加されました。たとえば、ViewModel レイヤからのFlow<PagingData<T>>
の出力をアサートするのに使用できます。これは、
Flow<PagingData<Value>>
のasSnapshot
Kotlin 拡張機能を介して行われ、Flow<PagingData<Value>>
が直接List<Value>
に変換されます。asSnapshot
ラムダを使用すると、scrollTo
やappendScrollWhile
などの API を介して、繰り返し可能な一貫した方法でアプリの UI を模倣できます。それにより、ページングされたデータセットのスナップショットがどの時点でも正しいことを検証できます。// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected values
asSnapshot
は、runTest
内での実行が想定されたsuspend
メソッドです。詳しくは、Android での Kotlin コルーチンのテストをご覧ください。(I55fd2、I5bd26、I7ce34、I51f4d、I2249f、Id6223、Ic4bab、Ib29b9、Ic1238、I96def、b/235528239)
API の変更
AsyncPagingDataDiffer
とPagingDataAdapter
におけるgetItem
とpeek
への UI 呼び出しが、メインスレッドでのみ呼び出し可能として正しくマークされるようになりました。(I699b6)TestPager
が使用する汎用型からワイルドカードが削除されました。それにより、Java プログラミング言語で記述されたコードで、これらのメソッドの結果を簡単に使用できるようになりました。(I56c42)
バージョン 3.2.0-alpha03
2022 年 10 月 24 日
androidx.paging:paging-*:3.2.0-alpha03
がリリースされました。バージョン 3.2.0-alpha03 に含まれる commit については、こちらをご覧ください。
ページング テスト
このリリースには新しいアーティファクト(paging-testing
)が含まれています。このアーティファクトは、アプリの各レイヤの単体テストと、独立した Paging との統合を中心に設計された API を提供します。
たとえば、この初回リリースには、エンドツーエンドのページング統合をシミュレーションするために通常必要となる Pager
や実際の UI とは別に、独自のカスタム PagingSource
実装の動作を検証できる TestPager
クラスが含まれています。
TestPager
は偽とみなす必要があります。これは、Pager
の実際の実装をミラーリングし、PagingSource
をテストするための簡略化された API サーフェスを提供するテストダブルです。これらの API は suspend
API であり、Android での Kotlin コルーチンのテストのガイドで説明されているように runTest
内で実行する必要があります。
これらの API の使用例については、room-paging
テストをご覧ください。これは、TestPager
を使用するようにリファクタリングされています。
API の変更
LoadResult.Page.data
からLoadResult.Page.iterator()
までの便利なイテレーションを可能にします。これにより、PagingSource.getRefreshKey
メソッドに渡されるPagingState
のpages
プロパティなどでList<LoadResult.Page>
を指定すると、Kotlin 標準ライブラリflatten
メソッドの使用が間接的に許可されます。(Ie0718)
バージョン 3.2.0-alpha02
2022 年 8 月 10 日
androidx.paging:paging-*:3.2.0-alpha02
がリリースされました。バージョン 3.2.0-alpha02 に含まれる commit については、こちらをご覧ください。
新機能
- Paging が
AsyncPagingDataDiffer
クラスまたはPagingDataAdapter
クラスを介してログを提供するようになり、PagingData
から収集されたデバッグ情報が公開されるようになりました。 - ログは、
adb shell
コマンドadb shell setprop log.tag.Paging [DEBUG|VERBOSE].
を介して有効にできます。(b/235527159)
バグの修正
- ランタイム
paging-runtime:3.1.1
以前でpaging-common:3.2.0-alpha01
を使用すると発生していたPagingDataDiffer
コンストラクタの欠落エラーを修正しました。(b/235256201)
バージョン 3.2.0-alpha01
2022 年 6 月 1 日
androidx.paging:paging-*:3.2.0-alpha01
がリリースされました。バージョン 3.2.0-alpha01 に含まれる commit については、こちらをご覧ください。
API の変更
CoroutineDispatcher
の代わりにCoroutineContext
を受け入れるPagingDataAdapter
とAsyncPagingDataDiffer
のコンストラクタを追加しました。(Idc878)- デフォルトで、
PagingData.from()
とPagingData.empty()
がプレゼンター側のCombinedLoadStates
に影響しなくなります。これらのコンストラクタにsourceLoadStates
とremoteLoadStates
を渡せる新しいオーバーロードが追加されました。これにより、LoadStates
が完全に終了するように設定する(NotLoading(endOfPaginationReached = false)
など)という既存の動作を維持しつつ、必要に応じてリモートの状態を含めるというオプションも設定できます。LoadStates
が渡されない場合、以前のCombinedLoadStates
は静的なPagingData
を受け取るとプレゼンター側で維持されます。(Ic3ce5、b/205344028)
バグの修正
- null を返すが null 以外の
initialKey
が設定されている場合に、PagingSource.getRefreshKey()
の結果がinitialKey
よりも適切に優先されるようになりました。(Ic9542、b/230391606)
外部からの協力
- test-coroutines-lib の移行により :compose:ui:ui-test API(updateApi)を更新しました。(I3366d)
バージョン 3.1
バージョン 3.1.1
2022 年 3 月 9 日
androidx.paging:paging-*:3.1.1
がリリースされました。バージョン 3.1.1 に含まれる commit については、こちらをご覧ください。
バグの修正
.cachedIn()
によって誤って挿入されていた世代間の中間LoadState.NotLoading
イベントを削除しました。この変更により、更新時や無効化時の読み込み失敗を再試行する間に生成されていた冗長なLoadState.NotLoading
イベントが削除され、LoadState
の変化への対応が非常に簡単になりました。
バージョン 3.1.0
2021 年 11 月 17 日
androidx.paging:paging-*:3.1.0
がリリースされました。バージョン 3.1.0 に含まれる commit については、こちらをご覧ください。
3.0.0 以降の重要な変更
Flow<PagingData>.observable
API とFlow<PagingData>.flowable
API は試験運用版ではなくなりました。LoadState
の動作の変更:PagingSource
とRemoteMediator
の両方で、LoadType.REFRESH
のendOfPaginationReached
が常にfalse
になりました。- Paging の
LoadStates
が、ダウンストリームを出力する前にPagingSource
とRemoteMediator
の有効な値を待つようになりました。新世代のPagingData
は、更新状態の場合に誤ってNotLoading
にリセットされることがなくなり、代わりに常に正しくLoading
から開始されるようになりました。 - プレゼンター API の
.loadStateFlow
と.addLoadStateListener
は、常にメディエータ状態がnull
に設定される初期CombinedLoadStates
を冗長に送信しなくなりました。
- 以前の世代でのキャンセルは、無効化または新しい世代に対して積極的に行われるようになりました。
Flow<PagingData>
で.collectLatest
を使用する必要はなくなりましたが、引き続き使用することをおすすめします。 PagingSource.LoadResult.Invalid
がPagingSource.load
の新しい戻り値の型として追加されました。この場合、Paging は、このPagingSource
に対する保留中または今後の読み込みリクエストすべて破棄し、無効にします。この戻り値の型は、データベースまたはネットワークから返される可能性がある無効または最新でないデータを処理することを目的としています。- ページが UI に表示される場合に同期的にトリガーされる
.onPagesPresented
と.addOnPagesUpdatedListener
のプレゼンター API を追加しました。ページの更新は、次のような状況で発生します。- 表示されるアイテムの変更が新しい世代に含まれるかどうかにかかわらず、新しい世代の PagingData の初期読み込みが行われる場合。すなわち、リストが完全に同じであるため更新なしで初期読み込みが完了する新しい世代では、このコールバックが引き続きトリガーされます。
- ページが挿入される場合(挿入されるページに新しいアイテムが含まれていない場合も同様)。
- ページがドロップされる場合(ドロップされるページが空である場合も同様)。
バージョン 3.1.0-rc01
2021 年 11 月 3 日
androidx.paging:paging-*:3.1.0-rc01
がリリースされました。バージョン 3.1.0-rc01 に含まれる commit については、こちらをご覧ください。
バグの修正
- オブザーバーが存在しない間、またはオブザーバーが新しい PagingData に切り替えている間に、Paging のダウンストリームによって複数の読み込みイベントが送信された場合の .cachedIn() における競合状態とメモリリークを修正しました。(Ib682e)
バージョン 3.1.0-beta01
2021 年 10 月 13 日
androidx.paging:paging-*:3.1.0-beta01
がリリースされました。バージョン 3.1.0-beta01 に含まれる commit については、こちらをご覧ください。
バグの修正
- 高速のアイテム アクセスが多いと、prefetchDistance で検討事項としてドロップされ、ページの読み込みが遅くなる問題を修正しました。これは特に、ユーザーのスクロール方向とは逆方向に読み込みが優先される順序で多数のアイテムが一度にレイアウトされる場合に発生する問題です。このようなアイテム アクセスは、ドロップされないように、バッファリングされ同期的に優先されるようになりました。(aosp/1833273)
バージョン 3.1.0-alpha04
2021 年 9 月 29 日
androidx.paging:paging-*:3.1.0-alpha04
がリリースされました。バージョン 3.1.0-alpha04 に含まれる commit については、こちらをご覧ください。
API の変更
Flow<PagingData>.observable
API とFlow<PagingData>.flowable
API は試験運用版ではなくなりました。(Ie0bdd)
バグの修正
- LoadState の場合、
LoadType.REFRESH
ではendOfPaginationReached
が常にfalse
になります。以前は endMediaPaginationReached が、RemoteMediatorREFRESH
ではtrue
になる可能性がありましたが、PagingSource ではその可能性がありませんでした。この動作は、常にfalse
を返すように統合され(REFRESH が終了することは適切でないため)、LoadState の API コントラクトの一部として文書化されるようになりました。ページ分けが終了したかどうかを判断する際は、常に APPEND または PREPEND のいずれかの方向に対して判断する必要があります。(I047b6) Paging の LoadState が、世代間でダウンストリームを出力する前に、PagingSource と RemoteMediator の両方の有効な値を待つようになりました。これにより、新しい世代の PagingData が、CombinedLoadStates.source.refresh で NotLoading を送信しないようにしました(すでに Loading 状態にある場合)。新しい世代の PagingData は、NotLoading に誤ってリセットされていたケースに対して、常に正しく Loading から開始されるようになりました。
以前の世代でのキャンセルは、無効化または新しい世代に対して積極的に行われるようになりました。
Flow<PagingData>
で .collectLatest を使用する必要はなくなりましたが、引き続き使用することを強くおすすめします。(I0b2b5、b/177351336、b/195028524)プレゼンター API の
.loadStateFlow
と.addLoadStateListener
は、初期のCombinedLoadStates
(常にメディエータの状態がnull
に設定され、ソースの状態がNotLoading(endOfPaginationReached = false)
に設定される)を冗長化して送信しなくなりました。つまり、次のようになります。- RemoteMediator を使用している場合、常にメディエータの状態が入力されます。
.loadStateFlow
で新しい loadState リスナーや新しいコレクタを登録しても、PagingData
から実際のCombinedLoadStates
を受信していない場合、すぐに現在の値を出力することはありません。これは、PagingData
を送信する前にコレクタまたはリスナーが起動した場合に発生することがあります。(I1a748)
バージョン 3.1.0-alpha03
2021 年 7 月 21 日
androidx.paging:paging-*:3.1.0-alpha03
がリリースされました。バージョン 3.1.0-alpha03 に含まれる commit については、こちらをご覧ください。
API の変更
LoadResult の 3 番目の戻り値の型 LoadResult.Invalid が PagingSource に追加されました。PagingSource.load が LoadResult.Invalid を返す場合、ページングが読み込まれたデータを破棄し、PagingSource を無効にします。この戻り値の型は、データベースまたはネットワークから返される可能性がある無効または古いデータを処理するように設計されています。
たとえば、背後のデータベースが書き込まれたにもかかわらず、PagingSource が時間内で無効にならない場合、その実装が読み込み元のバッキング データセットの不変性に依存している場合は一貫性のない結果を返す場合があります(たとえば LIMIT OFFSET スタイルの DB 実装)。このシナリオでは、読み込み後に無効化をチェックし、LoadResult.Invalid を返すことをおすすめします。これにより、Paging は、この PagingSource への保留中または将来の読み込みリクエストを破棄して無効にします。
この戻り値の型は、LivePagedList または RxPagedList を利用する Paging2 API でもサポートされています。Paging2 の PagedList API で PagingSource を使用すると、PagedList は直ちに接続解除され、以後この PagedList へのデータの読み込みは停止され、PagingSource で無効化がトリガーされます。
LoadResult はシールクラスです。つまり、ソース互換性のない変更であり、PagingSource.load の結果を直接使用するユースケースではコンパイル時に LoadResult.Invalid を扱う必要があります。たとえば、網羅的な when で戻り値の型をチェックしている Kotlin ユーザーは、Invalid 型のチェックを追加する必要があります。(Id6bd3、b/191806126、b/192013267)
バグの修正
- PagingSource.registerInvalidatedCallback または DataSource.addInvalidatedCallback で追加された無効化コールバックは、すでに無効な PagingSource / DataSource に登録されていた場合、自動的にトリガーされるようになりました。これにより、初期読み込み時にすでに無効だった Source が提供されたとき、Paging が無効化シグナルを逃して、停止するという競合状態が解消されます。さらに、無効化コールバックは、確実に 1 回だけ呼び出されるため、トリガーされた後に適切に削除されるようになりました。(I27e69)
- 新しくインスタンス化された PagedList ストリームから、プレースホルダの初期値(InitialPagedList)を送信します。たとえば、LivePagedListBuilder または RxPagedListBuilder は、以前に読み込んだデータを削除しなくなります。
バージョン 3.1.0-alpha02
2021 年 7 月 1 日
androidx.paging:paging-*:3.1.0-alpha02
がリリースされました。バージョン 3.1.0-alpha02 に含まれる commit については、こちらをご覧ください。
新機能
表示されたページが UI で更新された直後にトリガーされる onPagesPresented リスナーおよびフロー プレゼンター API を追加しました。
この更新は UI と同期されているため、.snapshot、.getItemCount などのアダプター メソッドを呼び出して、更新が適用された後の状態を調べることができます。なお、.snapshot() は更新のたびに呼び出すと高コストになる可能性があるため、明示的に呼び出されたままになっています。
ページの更新は、次のような状況で発生します。
- 表示されるアイテムの変更が新しい世代に含まれるかどうかにかかわらず、新しい世代の PagingData の初期読み込みが行われる場合。すなわち、リストが完全に同じであるため更新なしで初期読み込みが完了する新しい世代では、このコールバックが引き続きトリガーされます。
- ページが挿入される場合(挿入されるページに新しいアイテムが含まれていない場合も同様)
- ページがドロップされる場合(ドロップされるページが空である場合も同様)(I272c9、b/189999634)
バグの修正
- LivePagedList または RxPagedList によって生成された初期値から PagedList.dataSource にアクセスしても、IllegalStateException が誤ってスローされなくなります。(I96707)
バージョン 3.1.0-alpha01
2021 年 6 月 2 日
androidx.paging:paging-*:3.1.0-alpha01
がリリースされました。バージョン 3.1.0-alpha01 に含まれる commit については、こちらをご覧ください。
API の変更
paging-rxjava3
が提供していたクラスをandroidx.paging.rxjava3
パッケージ配下に移動し、paging-rxjava2
と競合しないようにしました(Ifa7f6)
バグの修正
- Paging がときどき no-op differ イベントを RecyclerView に送信する問題を修正しました。これにより、特定のリスナーが早期にトリガーされていました。(Ic507f、b/182510751)
外部からの協力
- サポートが終了している PagedList compat API を rxjava3 のアーティファクトに追加しました(Id1ce2、b/182497591)
Paging Compose バージョン 1.0.0
バージョン 1.0.0-alpha20
2023 年 5 月 24 日
androidx.paging:paging-compose:1.0.0-alpha20
がリリースされました。バージョン 1.0.0-alpha20 に含まれる commit については、こちらをご覧ください。
新機能
- Paging Compose で、
PagingData.from(fakeData)
を作成し、そのPagingData
をMutableStateFlow
でラップすることで、架空のデータのリストのプレビューがサポートされるようになりました(例:MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
)。そのデータを@Preview
への入力として使用することで、collectAsLazyPagingItems()
を呼び出すと、プレビュー可能なLazyPagingItems
が提供されます。(I8a78d、b/194544557)。
バグの修正
LazyPagingItems
で収集されたpager.flow.cachedIn
のキャッシュ データが、非同期収集を必要とせずに、状態の復元後すぐに利用できるようになりました。つまり、キャッシュされたデータは、状態が復元された最初のコンポーズ後、すぐにプレゼンテーションの準備が整います。(I97a60、b/177245496)。
バージョン 1.0.0-alpha19
2023 年 5 月 3 日
androidx.paging:paging-compose:1.0.0-alpha19
がリリースされました。バージョン 1.0.0-alpha19 に含まれる commit については、こちらをご覧ください。
すべての遅延レイアウトをサポートする
以前の Paging Compose では、LazyListScope
でカスタム items
拡張機能と itemsIndexed
拡張機能が提供されていたため、LazyVerticalGrid
、HorizontalPager
などの他の遅延レイアウトや、Wear と TV ライブラリで提供されるその他のカスタム遅延コンポーネントでは Paging Compose を使用できませんでした。この柔軟性の問題に対処することが、このリリースの主なアップデートです。
より遅延のレイアウトをサポートするには、別のレイヤで API を構築する必要がありました。遅延レイアウトごとにカスタム items
API を提供するのではなく、Paging Compose で、itemKey
と itemContentType
の LazyPagingItems
に対するやや低レベルの拡張メソッドが提供されるようになりました。これらの API は、LazyColumn
、LazyVerticalGrid
用にすでに存在する標準の items
API や、HorizontalPager
などの API の同等の機能に対する key
パラメータと contentType
パラメータの実装を支援することに重点を置いています。(Ifa13b、Ib04f0、b/259385813)。
つまり、LazyVerticalGrid
をサポートする場合は次のようになります。
// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()
LazyVerticalGrid(columns = GridCells.Fixed(2)) {
// Here we use the standard items API
items(
count = lazyPagingItems.itemCount,
// Here we use the new itemKey extension on LazyPagingItems to
// handle placeholders automatically, ensuring you only need to provide
// keys for real items
key = lazyPagingItems.itemKey { it.uniqueId },
// Similarly, itemContentType lets you set a custom content type for each item
contentType = lazyPagingItems.itemContentType { "contentType" }
) { index ->
// As the standard items call provides only the index, we get the item
// directly from our lazyPagingItems
val item = lazyPagingItems[index]
PagingItem(item = item)
}
}
これらの新しい API のその他の使用例については、サンプルをご覧ください。
これらの変更により、LazyColumn
と LazyRow
の例は数行長くなりますが、今後 Paging Compose を使用するユーザーにとっては、すべての遅延レイアウトにわたる一貫性が重要な要素であると感じました。そのため、LazyListScope
の既存の拡張機能のサポートは終了しました。(I0c459、I92c8f、b/276989796)。
API の変更
- 新しい API への移行を容易にするため、
LazyListScope
のitems
拡張関数とitemsIndexed
拡張関数でcontentType
パラメータがサポートされるようになりました。これは、新しい API のサポートを反映したものです。(Ib1918、b/255283378)。
依存関係の更新
- Paging Compose で、依存関係が Compose 1.0.5 から Compose 1.2.1 に更新されました。(Ib1918、b/255283378)。
バージョン 1.0.0-alpha18
2023 年 2 月 8 日
androidx.paging:paging-compose:1.0.0-alpha18
がリリースされました。変更はありません。バージョン 1.0.0-alpha18 に含まれる commit については、こちらをご覧ください。
バージョン 1.0.0-alpha17
2022 年 10 月 24 日
androidx.paging:paging-compose:1.0.0-alpha17
がリリースされました。バージョン 1.0.0-alpha17 に含まれる commit については、こちらをご覧ください。
新機能
collectLazyPagingItems
の呼び出し時のカスタムCoroutineContext
のサポートを追加しました。(I7a574、b/243182795、b/233783862)
バージョン 1.0.0-alpha16
2022 年 8 月 10 日
androidx.paging:paging-compose:1.0.0-alpha16
がリリースされました。バージョン 1.0.0-alpha16 に含まれる commit については、こちらをご覧ください。
新機能
- Paging が
LazyPagingItems
クラスを介してログを提供するようになり、PagingData から収集されたデバッグ情報が公開されるようになりました。 - ログは、
adb shell
コマンドadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
を介して有効にできます。([b/235527159}(https://issuetracker.google.com/issues/235527159))
バグの修正
paging-common:3.1.1
以前でpaging-compose:1.0.0-alpha15
を使用すると発生していたPagingDataDiffer
コンストラクタの欠落エラーを修正しました。(b/235256201、b/239868768)
バージョン 1.0.0-alpha15
2022 年 6 月 1 日
androidx.paging:paging-compose:1.0.0-alpha15
がリリースされました。バージョン 1.0.0-alpha15 に含まれる commit については、こちらをご覧ください。
API の変更
CoroutineDispatcher
の代わりにCoroutineContext
を受け入れるPagingDataAdapter
とAsyncPagingDataDiffer
のコンストラクタを追加しました。(Idc878)
バグの修正
LazyPagingItems
により最初のloadState
が設定され、LoadState.Loading
の更新が行われるようになりました。(I55043、b/224855902)
バージョン 1.0.0-alpha14
2021 年 10 月 13 日
androidx.paging:paging-compose:1.0.0-alpha14
がリリースされました。バージョン 1.0.0-alpha14 に含まれる commit については、こちらをご覧ください。
バージョン 1.0.0-alpha13
2021 年 9 月 29 日
androidx.paging:paging-compose:1.0.0-alpha13
がリリースされました。バージョン 1.0.0-alpha13 に含まれる commit については、こちらをご覧ください。
API の変更
LazyPagingItems.snapshot()
関数をLazyPagingItems.itemSnapshotList
プロパティに置き換えました。(Ie2da8)- サポートが終了した
LazyPagingItems.getAsState()
を削除しました。(Ie65e4)
バージョン 1.0.0-alpha12
2021 年 7 月 21 日
androidx.paging:paging-compose:1.0.0-alpha12
がリリースされました。バージョン 1.0.0-alpha12 に含まれる commit については、こちらをご覧ください。
API の変更
- Paging と
LazyColumn/Row
の接続に使用するitems(lazyPagingItems)
とitemsIndexed(lazyPagingItems)
で、アイテムを表す固定キーを指定するためのオプションのキーパラメータを使用できるようになりました。キーの詳細については、こちらをご覧ください。(I7986d) lazyPagingItems.getAsState(index)
関数のサポートは終了しています。代わりにlazyPagingItems[index]
を使用してください。(I086cb、b/187339372)
バージョン 1.0.0-alpha11
2021 年 6 月 30 日
androidx.paging:paging-compose:1.0.0-alpha11
がリリースされました。バージョン 1.0.0-alpha11 に含まれる commit については、こちらをご覧ください。
バージョン 1.0.0-alpha10
2021 年 6 月 2 日
androidx.paging:paging-compose:1.0.0-alpha10
がリリースされました。バージョン 1.0.0-alpha10 に含まれる commit については、こちらをご覧ください。
バージョン 1.0.0-alpha09
2021 年 5 月 18 日
androidx.paging:paging-compose:1.0.0-alpha09
がリリースされました。バージョン 1.0.0-alpha09 に含まれる commit については、こちらをご覧ください。
バグの修正
- LazyPagingItems の itemCount とアイテム ゲッターが監視可能になり、LazyVerticalGrid でも使用できるようになりました。(Ie2446、b/171872064、b/168285687)
Compose の互換性
androidx.paging:paging-compose:1.0.0-alpha09
は、Compose バージョン1.0.0-beta07
以降に対してのみ互換性があります。
バージョン 1.0.0-alpha08
2021 年 2 月 24 日
androidx.paging:paging-compose:1.0.0-alpha08
がリリースされました。バージョン 1.0.0-alpha08 に含まれる commit については、こちらをご覧ください。
Compose 1.0.0-beta01 との統合に合わせて更新しました。
バージョン 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 に含まれる commit については、こちらをご覧ください。
バグの修正
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 に含まれる commit については、こちらをご覧ください。
バグの修正
- コンビニエンス プロパティ
CombinedLoadStates.refresh
、CombinedLoadStates.prepend
、CombinedLoadStates.append
が更新され、リモート更新が確実に適用されるように、メディエータとソースの両方の読み込み状態がNotLoading
になった後で初めてLoading
からNotLoading
に移行するようになりました。(I65619)
バージョン 1.0.0-alpha03
2020 年 12 月 2 日
androidx.paging:paging-compose:1.0.0-alpha03
がリリースされました。バージョン 1.0.0-alpha03 に含まれる commit については、こちらをご覧ください。
- Compose 1.0.0-alpha08 に合わせて更新しました。
バージョン 1.0.0-alpha02
2020 年 11 月 11 日
androidx.paging:paging-compose:1.0.0-alpha02
がリリースされました。バージョン 1.0.0-alpha02 に含まれる commit については、こちらをご覧ください。
API の変更
.peek()
、.snapshot()
、.retry()
、.refresh()
メソッドをLazyPagingItem
に追加しました。これはAsyncPagingDataDiffer
/PagingDataAdapter
で利用できるものと同じ機能を公開します。(Iddfe8、b/172041660)
バージョン 1.0.0-alpha01
2020 年 10 月 28 日
androidx.paging:paging-compose:1.0.0-alpha01
がリリースされました。バージョン 1.0.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
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.1
バージョン 3.0.1
2021 年 7 月 21 日
androidx.paging:paging-*:3.0.1
がリリースされました。バージョン 3.0.1 に含まれる commit については、こちらをご覧ください。
バグの修正
LivePagedList
またはRxPagedList
によって生成された初期値からPagedList.dataSource
にアクセスしたときに誤って IllegalStateException がスローされることがなくなりました。(I96707)
バージョン 3.0.0
バージョン 3.0.0
2021 年 5 月 5 日
androidx.paging:paging-*:3.0.0
がリリースされました。バージョン 3.0.0 に含まれる commit については、こちらをご覧ください。
3.0.0 の主な機能
新しい Paging 3 API を優先して、Paging 2.xx の既存の API の大半のサポートが終了し、次のように改善されています。
- Kotlin のコルーチンとフローの最高級のサポート
- キャンセルのサポート
- 組み込みの読み込み状態およびエラー信号
- 再試行および更新の機能
- 3 つの DataSource サブクラスすべてを統一された PagingSource クラスに統合
- セパレータを追加する組み込みページを含むカスタムページの変換
- 状態ヘッダーおよびフッターの読み込み
バージョン 3.0.0-rc01
2021 年 4 月 21 日
androidx.paging:paging-*:3.0.0-rc01
がリリースされました。バージョン 3.0.0-rc01 に含まれる commit については、こちらをご覧ください。
バグの修正
- Paging がときどき no-op differ イベントを RecyclerView に送信する問題を修正しました。これにより、特定のリスナーが早期にトリガーされていました。(Ic507f、b/182510751)
バージョン 3.0.0-beta03
2021 年 3 月 24 日
androidx.paging:paging-*:3.0.0-beta03
がリリースされました。バージョン 3.0.0-beta03 に含まれる commit については、こちらをご覧ください。
バグの修正
- RecyclerView での予期しないジャンプを防ぐため、リストが再読み込みされる際のプレースホルダの処理方法が改善されました。詳しくは、NullPaddedDiffing.md をご覧ください。(If1490、b/170027529、b/177338149)
.build()
が呼び出されたときに、各種 PagedList ビルダー(以前の互換性パス)がメインスレッドで誤ってDataSource.Factory.create()
を同期的に呼び出さないようになりました。(b/182798948)
バージョン 3.0.0-beta02
2021 年 3 月 10 日
androidx.paging:paging-*:3.0.0-beta02
がリリースされました。バージョン 3.0.0-beta02 に含まれる commit については、こちらをご覧ください。
API の変更
- Rx3 拡張機能が
@ExperimentalCoroutinesApi
のオプトイン要件を正しく反映するようになりました。これまでこの拡張機能は@get
メソッドにマークされていました。このメソッドは、Kotlin コンパイラでは次の理由で無視されます: https://youtrack.jetbrains.com/issue/KT-45227(I5733c)
バグの修正
- 試験運用版 API の一般使用に対する制限を適用します。(I6aa29、b/174531520)
- リモート更新が呼び出されたときに
PagingState
が常にnull
になるバグを修正しました。 - PagingSource によって返された空のページが、Paging が
prefetchDistance
を満たすために再度フェッチすることを妨げ、Paging が「停止」する原因となるバグを修正しました。
バージョン 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 に含まれる commit については、こちらをご覧ください。
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 をマークするまで待機します。これにより、ヘッダーとフッターが初期読み込みと同期して表示されるため、ユーザーはスクロールしてターミナル セパレータを確認する必要がなくなります。(Ibe993、b/174700218)
バグの修正
- PageFetcher が PagingSource から読み込みを開始する前に PagingSource が無効にされると発生する、まれなメモリリークを修正しました。(I9606b、b/174625633)
バージョン 3.0.0-alpha12
2021 年 1 月 13 日
androidx.paging:paging-*:3.0.0-alpha12
がリリースされました。バージョン 3.0.0-alpha12 に含まれる commit については、こちらをご覧ください。
API の変更
- InvalidatingPagingSourceFactory は抽象メソッドを持たないため、抽象クラスではなくなりました。(I4a8c4)
- Java ユーザー向けに、Lifecycle または CoroutineScope の代わりに ViewModel を受け入れる .cachedIn() のオーバーロードを追加しました。(I97d81、b/175332619)
- 変換演算子の引数に Executor を受け入れることで、Java 呼び出し元が PagingData 変換オペレーションを非同期的に使用できるようにしました。すべての -Sync 変換演算子から -Sync サフィックスが削除されました。Kotlin Coroutine ユーザーは、代わりに停止中のブロックを受け入れる拡張関数を呼び出すことで、あいまいさを排除する必要があります。
PagingData 変換演算子はすべて、静的 PagingDataTransforms クラスの拡張機能に移動されました。Java ユーザーは、静的ヘルパー(
PagingDataTransforms.map(pagingData, transform)
など)を介してそれらを呼び出す必要があります。Kotlin ユーザーは、構文は同じですが、関数をインポートする必要があります。(If6885、b/172895919)
バグの修正
- すでにページ分けの最後に到達していると
adapter.refresh()
中にRemoteMediator.load()
が呼び出されないバグを修正しました。
バージョン 3.0.0-alpha11
2020 年 12 月 16 日
androidx.paging:paging-*:3.0.0-alpha11
がリリースされました。バージョン 3.0.0-alpha11 に含まれる commit については、こちらをご覧ください。
新機能
- 以下の基本的なユースケースについて、保存済み状態のサポートが追加されました(特にレイヤ化されたソースの場合の完全なサポートは、まだ構築中です)。
- フローがキャッシュに保存され、アプリが中止されていない場合(たとえば、フローがビューモデルでキャッシュに保存され、アクティビティがプロセスで再作成されているなど)。
- ページング ソースがカウントされ、プレースホルダが有効化され、レイアウトが交互配置されていない場合。
API の変更
PagingSource.getRefreshKey()
が安定版 API になりました。(I22f6f、b/173530980)PagingSource.invalidate
がオープン関数ではなくなりました。無効化が発生したときに通知を受け取る必要がある場合は、invalidate をオーバーライドする代わりに registerInvalidatedCallback メソッドを呼び出すことを検討してください。(I628d9、b/173029013、b/137971356)- Pager は、オプトイン アノテーションを介して試験運用版の API を試験運用版でないパブリック API にリークせず、通常のコンストラクタと合わせて単一の試験運用版コンストラクタを持つようになりました。(I9dc61、b/174531520)
- コンビニエンス プロパティ
CombinedLoadStates.refresh
、CombinedLoadStates.prepend
、CombinedLoadStates.append
が更新され、リモート更新が確実に適用されるように、メディエータとソースの両方の読み込み状態がNotLoading
になった後で初めてLoading
からNotLoading
に移行するようになりました。(I65619) LoadParams.pageSize が削除されました(サポートはすでに終了しています)。PagingSource では
LoadParams.loadSize
を使用することをおすすめします。PagingConfig.initialLoadSize
と等価の初回読み込み呼び出しを除いて、LoadParams.loadSize
は常にPagingConfig.pageSize
と等価になりました。Pager または PagedList を使用せずに Paging2 DataSource をテストする場合、
initialLoadSize
も設定していると、pageSize
がPagingConfig.pageSize
と一致しないことがあります。このテストが重要な場合は、Pager / PagedList を使用してください。これらは、DataSource 読み込みメソッドに対して正しい PageSize を内部的に設定します。(I98ac7、b/149157296)
バグの修正
- PagingConfig.maxSize を設定してセパレータを使用したときの IllegalStateException によるクラッシュを修正しました。(I0ed33、b/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 に含まれる commit については、こちらをご覧ください。
API の変更
サポートが終了している
dataRefreshFlow
API とdataRefreshListener
API は、loadStateFlow / Listener の更新と重複するため、削除されました。移行する場合、loadStateFlow に相当するコードは次のようになります。loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
バグの修正
- RemoteMediator
REFRESH
の endOfPaginationReached が LoadState の更新に正しく伝播され、リモートのAPPEND
とPREPEND
がトリガーされなくなりました。(I94a3f、b/155290248) - 最初のページが空であるかフィルタリング条件が厳しいために空のリストが提示されても、Paging は
PREPEND
またはAPPEND
の読み込みを開始できるようになりました。(I3e702、b/168169730) - 無効化が急に発生すると、その後の PagingSource の生成で
getRefreshKey
が呼び出されない問題を修正しました。(I45460、b/170027530)
外部からの協力
.invalidate()
API 用に新しい抽象クラス InvalidatingPagingSourceFactory が追加されました。これにより、生成されるすべての PagingSource に invalidate を転送できます。@claraf3 に感謝いたします。(Ie71fc、b/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 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
API の変更
DataSource.InvalidatedCallback
の Kotlin と Java のバリアントは、機能インターフェース(Kotlin 1.4 で利用可能)を介して Kotlin で SAM 変換を有効にすることにより統合されました。これにより、.map
または.mapByPage
による変換後に kotlin バリアントの無効化コールバックが呼び出されないバグも修正されました。(I1f244、b/165313046)
バグの修正
- Paging と ViewPager のインタラクションが大幅に改善されました。具体的には、Paging ではページの無効化を理由とした
RemoteMediator#load
の呼び出しをキャンセルしなくなりました。また、REFRESH が必要な場合、REFRESH リクエストが正常に完了するまで、先頭または最後での読み込みリクエストも行わなくなりました。(I6390b、b/162252536) - MissingGetterMatchingBuilder の API lint チェックが androidx で有効になりました(I4bbea、b/138602561)
- バックグラウンド スレッドからの RecyclerView の通知が原因で
.withLoadState*
ConcatAdapter
ヘルパーがクラッシュするバグを修正しました(I18bb5、b/170988309) - 極めて小さな非空白ページの読み込みにおいて、プリフェッチで読み込みが正常にトリガーされないことがあるバグを修正しました(Iffda3、b/169259468)
バージョン 3.0.0-alpha07
2020 年 10 月 1 日
androidx.paging:paging-*:3.0.0-alpha07
がリリースされました。バージョン 3.0.0-alpha07 に含まれる commit については、こちらをご覧ください。
API の変更
- 非同期の Guava ベースの PagingData 演算子で、Executor をパラメータとして受け取り、実行コンテキストを制御できるようになりました。(Id4372)
バグの修正
- 競合状態が原因で RemoteMediator でスローされる IndexOutOfBounds 例外を修正しました。(I00b7f、b/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 に含まれる commit については、こちらをご覧ください。
API の変更
PagingDataAdapter.setHasStableIds
が呼び出されるたびにUnsupportedOperationException
がスローされ、固定 ID がサポートされていないことが明確に示されます。(Ib3890、b/158801427)
バグの修正
- 空白のページが多数挿入された場合でも insertSeparators が空白のページを除外しなくなり、プレゼンターがプリフェッチの距離に準拠するようになりました。(I9cff6、b/162538908)
バージョン 3.0.0-alpha05
2020 年 8 月 19 日
androidx.paging:paging-*:3.0.0-alpha05
がリリースされました。バージョン 3.0.0-alpha05 に含まれる commit については、こちらをご覧ください。
バグの修正
- Paging は、提示されるデータがかなりフィルタリングされている場合でも、ページのプリフェッチを正しく行うようになりました。
- 読み込みの再試行に対して
LoadResult.Error
を返しても、アイテム アクセスが誤って再試行を再びトリガーすることはなくなりました。
外部からの協力
- テストのクリーンアップにご協力いただいた Clara F 氏に感謝いたします。(549612)
バージョン 3.0.0-alpha04
2020 年 8 月 5 日
androidx.paging:paging-*:3.0.0-alpha04
がリリースされました。バージョン 3.0.0-alpha04 に含まれる commit については、こちらをご覧ください。
API の変更
peek()
API がAsyncPagingDataDiffer
とPagingDataAdapter
に追加され、ページの読み込みをトリガーせずに、提示されるデータにアクセスできるようになりました(I38898、b/159104197)snapshot()
API がPagingDataAdapter
とAsyncPagingDataDiffer
に追加され、ページの取得をトリガーせずに、提示されるアイテムを取得できるようになりました(I566b6、b/159104197)PagingData.from(List<T>)
コンストラクタが追加され、静的リストを提示できるようになりました。このリストを PagingData フロー全体と組み合わせて、特定の状態(初期 REFRESH が終了する前や変換テスト用など)で静的リストを表示できます(Id134d)- dataRefresh フロー / Listener API はサポートが終了されます。これらは、提示されたアイテムの状態を REFRESH 時に公開するためのものですが、loadState フロー / Listener コールバックのタイミングと itemCount プロパティの改善により、不要になりました(Ia19f3)
PagingSource
とRemoteMediator
の RxJava3 互換ラッパーが追加されました(I49ef3、b/161480176)
バグの修正
toPagingSourceFactory
ヘルパーを介してPagingSource
に変換されるPositionalDataSource
(Room によって生成されるPagingSource
を含む)がジャンプをサポートするようにそれ自体を正しくマークするようになりました(I3e84c、b/162161201)- submitData の同期バリアントを使用すると、場合によって競合が発生し、
ClosedSendChannelException
の原因となるバグを修正しました(I4d702、b/160192222)
外部からの協力
- Slack に代わり、RxJava3 互換ラッパーの追加に協力してくださった Zac Sweers 氏に感謝いたします(I49ef3、b/161480176)
バージョン 3.0.0-alpha03
2020 年 7 月 22 日
androidx.paging:paging-*:3.0.0-alpha03
がリリースされました。バージョン 3.0.0-alpha03 に含まれる commit については、こちらをご覧ください。
API の変更
- PagingState のコンストラクタが一般公開され、getRefreshKey() の実装のテストが簡単になりました(I8bf15)
- 元のバリアントと kotlin バリアントとの曖昧さを解消するため、Java から DataSource kotlin マップが非表示になりました(If7b23、b/161150011)
- Kotlin ユーザーの便宜性を目的とする冗長な API が @JvmSynthetic とマークされました(I56ae5)
- itemsBefore と itemsAfter をデフォルトで COUNT_UNDEFINED に設定する LoadResult.Page のコネクタにオーバーロードが追加されました(I47849)
- 既存の PagingData 演算子に停止中メソッドを受け入れされ、Java ユーザー向けの新しい mapSync、flatMapSync、filterSync の非停止演算子を導入しました。既存の変換メソッドは拡張関数に移行されたため、Kotlin ユーザーはインポートする必要があります(I34239、b/159983232)
バグの修正
- Room(および PositionalDataSource)の PagingSource に、最初のページの一部として先頭の区切り文字が表示され、ユーザーがスクロールして表示する必要がなくなりました(I6f747、b/160257628)
- PagingData.filter() による変換後、リクエストされたインデックスと一致するページが返されるまで、プレースホルダ上のアイテム アクセスが PagingSource 読み込みを正しくトリガーするようになりました(I95625、b/158763195)
- PagingSource からエラーが返された後でスクロールすると PagingDataAdapter.retry() が再試行できなくなることがあるバグを修正しました(I1084f、b/160194384)
- ページを削除した後のアイテム アクセスではページは読み込まれないのにアイテム アクセスが prefetchDistance 内にあった問題を修正しました(Ie95ae、b/160038730)
- PagingConfig.maxSize を設定しても、削除イベント後にプレースホルダが有効にならなくなりました(I2be29、b/159667766)
バージョン 3.0.0-alpha02
2020 年 6 月 24 日
androidx.paging:paging-*:3.0.0-alpha02
がリリースされました。バージョン 3.0.0-alpha02 に含まれる commit については、こちらをご覧ください。
API の変更
PagingConfig
のコンストラクタに一般的なデフォルト値を持つオーバーロードを追加しました(I39c50、b/158576040)。PagingDataAdapter
とAsyncPagingDataDiffer
のコンストラクタに一般的なデフォルト値を持つオーバーロードを追加しました(Ie91f5)。- アダプタ API の
dataRefreshFlow
とdataRefreshListener
では、PagingData
が空かどうかを示すブール値を渡すようになりました(I6e37e、b/159054196)。 - RemoteMediator 用の RxJava API と Guava API である RxRemoteMediator と ListenableFutureRemoteMediator を追加しました。
isEmpty()
やfirstItemOrNull()
などの一般的なアイテムへのアクセス用に PagingState にヘルパーを追加しました(I3b5b6、b/158892717)。
バグの修正
- 無効な PagingSource を誤って再利用しないように(不明確なエラーが発生していました)、Pager はファクトリで PagingSource の再利用をチェックするようになりました(I99809、b/158486430)。
- RemoteMediator REFRESH でエラーが発生して PagingSource の読み込みを妨げることはなくなりました(I38b1b、b/158892717)。
submitData
の非 suspend バージョンは、submitData
の suspend バージョンの後に呼び出された場合に複数のPagingData
の同時収集が原因でクラッシュを引き起こすことがなくなりました。(I26358、b/158048877)- 設定の変更後に発生する可能性のある「ページャーから 2 回収集できない」例外を修正しました(I58bcc、b/158784811)。
バージョン 3.0.0-alpha01
2020 年 6 月 10 日
androidx.paging:paging-*:3.0.0-alpha01
がリリースされました。バージョン 3.0.0-alpha01 に含まれる commit については、こちらをご覧ください。
Paging ライブラリが 3.0 にアップデートされ、いくつかの重要な新機能が有効になりました。
3.0 の新機能
- Kotlin のコルーチンとフローの最高級のサポート。
- コルーチンの suspend 関数、RxJava Single または Guava ListenableFuture プリミティブによる非同期読み込みのサポート。
- レスポンシブ UI 設計のための組み込みの読み込み状態およびエラー信号(再試行および更新機能を含む)。
- リポジトリ レイヤの改善
- 簡易化されたデータソース インターフェース
- 簡易化されたネットワーク + データベース ページネーション
- キャンセルのサポート
- プレゼンテーション レイヤの改善
既知の問題
- 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 に対する commit については、こちらをご覧ください。
バグの修正
- 無効化中に位置を変換する際にまれに発生する
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 に含まれる commit については、こちらをご覧ください。
バグの修正
- プレースホルダが無効になっている場合、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/73781068PagedList.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
ですでにリリース済み)PagedListAdapter
とAsyncPagedListDiffer
が移動イベントを通知できずにクラッシュする問題を修正しました。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
とまったく同じです。
バグの修正
PagedListAdapter
とAsyncPagedListDiffer
が移動イベントを通知できずにクラッシュする問題を修正しました。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 が用意されており、Observable
と Flowable
を作成し、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.Builder
、LivePagedListBuilder
)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 に反映されています(上記を参照)。 - プレースホルダが有効で、合計サイズがページサイズのちょうど倍数である場合に、
PositionalDataSource
でBoundaryCallback.onItemAtEndLoaded
が呼び出されないバグを修正しました。
バージョン 1.0.0-alpha5
2018 年 1 月 22 日
バグの修正
- プレースホルダが無効になっているときのページ読み込みを修正しました。b/70573345
- IllegalArgumentException のバグを見つけるためのログが追加されました。b/70360195(および Room 側の理論的な修正)
- Javadoc のサンプルコードを修正しました。b/70411933、b/71467637