Ребят. Помогите с пагинацией.
Во фрагменте есть Toolbar и RecyclerView.
На тулбаре присутствует SearchView.
По ивенту QueryTextSubmit() я должен "реинициализировать" пагинацию
таким образом что бы очистить полностью текущие данные и
дать параметры запроса в DataSource для загрузки новых даных.
Пагинация реализована полностью по даному примеру:
https://medium.com/@sharmadhiraj.np/android-paging...
Как это правильнее всего сделать что бы не возникало конфликтов
с жизненными циклами фрагмента и его активити?
У меня первая мысль вынести тело блока init {} в отдельный метод
скажем в public fun initPagination(searchRequest: SearchRequest? = null)
Внутри этого метода в конструктор DataSourceFactory передать SearchRequest и далее походу
с ним работать в DataSource.loadInitial()/DataSource.loadAfter()
Но этот вариант мне кажется костыльным.
class ImagesViewModel : ViewModel() {
private val imageService = API.getApi().create(ImageService::class.java)
var imageList: LiveData<PagedList<ImageItem>>
private val compositeDisposable = CompositeDisposable()
private val pageSize = 5
private var imageDataSourceFactory: ImageDataSourceFactory
init {
imageDataSourceFactory = ImageDataSourceFactory(compositeDisposable, imageService)
val config = PagedList.Config.Builder()
.setPageSize(pageSize)
.setInitialLoadSizeHint(pageSize * 2)
.setEnablePlaceholders(false)
.build()
imageList = LivePagedListBuilder(imageDataSourceFactory, config).build()
}
fun getState(): LiveData<State> = Transformations.switchMap<ImageDataSource,
State>(imageDataSourceFactory.imageDataSourceLiveData, ImageDataSource::state)
fun retry() {
imageDataSourceFactory.imageDataSourceLiveData.value?.retry()
}
fun listIsEmpty(): Boolean {
return imageList.value?.isEmpty() ?: true
}
override fun onCleared() {
super.onCleared()
compositeDisposable.dispose()
}
}