Я пытаюсь реализовать 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()
}
}
}
И это мой Repository
.Я внедряю BoundaryCallback
с помощью Kodein
Dependecy Injector.
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.Какая лучшая практика для достижения этой цели?
Спасибо