[英]RecyclerView with multiple view types and paging library with boundary callback
[英]Boundary Callback (Android Paging Library) with CoroutineScope
我正在嘗試使用ViewModel
和Kotlin Coroutines
實現Android Paging library
我有一個實現CoroutineScope
的ViewModel
。 這取決於Repository
:
class MovieListViewModel(
private val movieRepository: MovieRepository
) : ViewModel(), CoroutineScope {
private val job = Job()
override val coroutineContext: CoroutineContext
get() = job + Dispatchers.IO
private lateinit var _movies: LiveData<PagedList<MovieBrief>>
val movies: LiveData<PagedList<MovieBrief>>
get() = _movies
init {
launch {
_movies = LivePagedListBuilder(movieRepository.getMovies(), DATABASE_PER_PAGE)
.setBoundaryCallback(movieRepository.movieBoundaryCallback)
.build()
}
}
}
這是我的Repository
。 我使用Kodein
Dependecy Injector 注入BoundaryCallback
。
class MovieRepositoryImpl(
private val movieDao: MovieDao,
boundaryCallback: MovieBoundaryCallback
) : MovieRepository {
override suspend fun getMovies(): DataSource.Factory<Int, MovieBrief> {
return movieDao.getMovies()
}
override val movieBoundaryCallback = boundaryCallback
}
BoundaryCallback
類內部onItemAtEndLoaded
調用 RESTAPI,然后將數據保存到 Room 數據庫(兩者都是掛起函數)。 所以我必須訪問我的 ViewModel 的協程范圍。 實現這一目標的最佳做法是什么?
謝謝
Paging 庫版本 3現已可用並支持Coroutine
。 PagedList.BoundaryCallback
現已Deprecated
,對於這種情況,我們需要使用RemoteMediator
,它有一個suspend fun load
來處理Remote+Local
分頁
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.