Skip to content

Commit 30c0187

Browse files
author
TonyTandAndroid
committed
Add rxjava2 paging support to fix the sample crash
airbnb#567
1 parent 8f52c34 commit 30c0187

File tree

2 files changed

+30
-10
lines changed

2 files changed

+30
-10
lines changed

epoxy-pagingsample/build.gradle

+3
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,13 @@ dependencies {
2020
implementation rootProject.deps.kotlin
2121

2222
implementation "org.jetbrains.anko:anko-coroutines:0.10.5"
23+
implementation "io.reactivex.rxjava2:rxjava:2.2.3"
24+
implementation "io.reactivex.rxjava2:rxandroid:2.1.0"
2325
implementation "androidx.room:room-common:$ANDROIDX_ROOM"
2426
implementation "androidx.room:room-runtime:$ANDROIDX_ROOM"
2527
implementation "androidx.paging:paging-common:$ANDROIDX_PAGING"
2628
implementation "androidx.paging:paging-runtime:$ANDROIDX_PAGING"
29+
implementation "androidx.paging:paging-rxjava2:$ANDROIDX_PAGING"
2730
implementation "androidx.recyclerview:recyclerview:$ANDROIDX_RECYCLERVIEW"
2831
kapt "androidx.room:room-compiler:$ANDROIDX_ROOM"
2932

epoxy-pagingsample/src/main/java/com/airbnb/epoxy/pagingsample/PagingSampleActivity.kt

+27-10
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@ import android.os.Bundle
66
import androidx.appcompat.app.AppCompatActivity
77
import androidx.appcompat.widget.AppCompatTextView
88
import androidx.lifecycle.AndroidViewModel
9-
import androidx.lifecycle.LiveData
10-
import androidx.lifecycle.Observer
119
import androidx.lifecycle.ViewModelProviders
12-
import androidx.paging.LivePagedListBuilder
1310
import androidx.paging.PagedList
11+
import androidx.paging.RxPagedListBuilder
1412
import androidx.recyclerview.widget.LinearLayoutManager
1513
import androidx.recyclerview.widget.RecyclerView
1614
import androidx.room.Room
@@ -19,6 +17,9 @@ import com.airbnb.epoxy.EpoxyModel
1917
import com.airbnb.epoxy.ModelView
2018
import com.airbnb.epoxy.TextProp
2119
import com.airbnb.epoxy.paging.PagedListEpoxyController
20+
import io.reactivex.Observable
21+
import io.reactivex.android.schedulers.AndroidSchedulers
22+
import io.reactivex.observers.DisposableObserver
2223
import kotlinx.coroutines.experimental.CommonPool
2324
import kotlinx.coroutines.experimental.delay
2425
import kotlinx.coroutines.experimental.launch
@@ -34,11 +35,24 @@ class PagingSampleActivity : AppCompatActivity() {
3435
recyclerView.layoutManager = LinearLayoutManager(this)
3536
recyclerView.adapter = pagingController.adapter
3637

38+
val observer = object : DisposableObserver<PagedList<User>>() {
39+
override fun onNext(pagedList: PagedList<User>) {
40+
pagingController.submitList(pagedList)
41+
42+
}
43+
44+
override fun onError(e: Throwable) {
45+
46+
}
47+
48+
override fun onComplete() {
49+
}
50+
}
51+
3752
val viewModel = ViewModelProviders.of(this).get(ActivityViewModel::class.java)
38-
viewModel.pagedList.observe(this, Observer {
39-
pagingController.submitList(it)
40-
})
53+
val subscribe = viewModel.pagedList.subscribeWith(observer)
4154
}
55+
4256
}
4357

4458
class TestController : PagedListEpoxyController<User>(
@@ -84,15 +98,18 @@ class PagingView(context: Context) : AppCompatTextView(context) {
8498

8599
}
86100

87-
class ActivityViewModel(app : Application) : AndroidViewModel(app) {
101+
class ActivityViewModel(app: Application) : AndroidViewModel(app) {
88102
val db by lazy {
89103
Room.inMemoryDatabaseBuilder(app, PagingDatabase::class.java).build()
90104
}
91-
val pagedList : LiveData<PagedList<User>> by lazy {
92-
LivePagedListBuilder<Int, User>(
105+
106+
val pagedList: Observable<PagedList<User>> by lazy {
107+
RxPagedListBuilder<Int, User>(
93108
db.userDao().dataSource, 100
94-
).build()
109+
).setNotifyScheduler(AndroidSchedulers.from(EpoxyAsyncUtil.getAsyncBackgroundHandler().looper))
110+
.buildObservable()
95111
}
112+
96113
init {
97114
bg {
98115
(1..3000).map {

0 commit comments

Comments
 (0)