Sam*_*ari 6 android kotlin android-viewmodel kotlinx.coroutines android-paging
我试图实现Android Paging library与ViewModel和Kotlin Coroutines
我有一个ViewModel实现CoroutineScope. 这取决于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()
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的Repository. 我注入BoundaryCallback与KodeinDependecy注射器。
class MovieRepositoryImpl(
private val movieDao: MovieDao,
boundaryCallback: MovieBoundaryCallback
) : MovieRepository {
override suspend fun getMovies(): DataSource.Factory<Int, MovieBrief> {
return movieDao.getMovies()
}
override val movieBoundaryCallback = boundaryCallback
}
Run Code Online (Sandbox Code Playgroud)
BoundaryCallback类内部onItemAtEndLoaded调用RESTAPI,然后将数据保存到Room数据库中(都是挂起函数)。所以我必须访问我的 ViewModel 的协程范围。实现这一目标的最佳实践是什么?
谢谢
分页库 版本 3现已推出并支持Coroutine.
PagedList.BoundaryCallback现在Deprecated,对于这种情况,我们需要使用它RemoteMediator,它有一个suspend fun load用于处理Remote+Local分页
| 归档时间: |
|
| 查看次数: |
930 次 |
| 最近记录: |