Paging Library + API でページング処理

Kenji Abe
3 min readJan 10, 2018

--

Paging LibraryはRoomだけではなくAPIでも使えるので、実際に簡単なサンプルを作って試しました。

build.gradle

Versionは1.0.0-alpha4–1 使っています。

implementation "android.arch.paging:runtime:1.0.0-alpha4-1"
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'

DataSource

まずはデータを取得する箇所からです。

DataSourceには PageKeyedDataSource , ItemKeyedDataSource , PositionalDataSource の3つが用意されています。

今回は PageKeyedDataSource を使って実装します。実際の取得とかは省略してます。(後のほうにサンプルリポジトリのリンクあるのでそっちを見てください)

3つのメソッドを使う必要があります。それぞれCallbackが渡されてるので、そこに結果と前/次ページの情報を渡してあげます。

前/次のページがもう存在しない場合は、nullを渡してあげると、それ以上ページングしないようになります。

Genericsでページングにしようするキーの型は指定できます。今回はIntにしていますが、例えば、APIが次のページのidを返すような場合でもGenericsをStringにして、Callbackの前/次ページにそのidを渡すようにすれば良いです。

DataSource.Factory

次にFactoryです。これは単純に先程つくったDataSourceを返すようにします。

ViewModel

ここまで出来たら後は通常のPaging Libraryの使い方と同じです。

PagedListAdapter 等の使い方は省略しますが、この repos というLiveDataをObserveして渡される値をAdapterにセットします。

これを実行するとスクロールしたら自動で次のページを取得するようなリストが出来ます。

Sample Repository

作ったサンプルはここに上げています。エラー処理とかほとんどやってないのですが…

Googleのサンプルがあったのですが、分かりにくかったので色々削ぎ落としました。

まとめ

DataSourceさえ作れれば、簡単にページングの処理が可能になります。
うまく利用すれば、Paging Libraryだいぶ便利です。

--

--

Kenji Abe

Programmer / Gamer / Google Developers Expert for Android, Kotlin / @STAR_ZERO