Подгрузка Image в ReсycleView
Собираю изображения из json в recyclerview. Как реализовать подгрузку следующих страниц, когда мы подходим к концу?
Я только учусь использовать retrofit, rxjava2. Прошу строго не судить и подсказать, что я делаю не так.
Вешаю слушатель в onBind внутри адаптера:
@Override
public void onBindViewHolder(@NonNull ImageViewHolder holder, final int position) {
Hit hit = hits.get(position);
Picasso.get().load(hit.getLargeImageURL())
.into(holder.imageViewPreview);
if (loadMoreListener != null && !isLoading && !noMore && position == getItemCount() - 1) {
isLoading = true;
loadMoreListener.loadMore();
}
}
Пытаюсь реализовать в активити подгрузку следующей страницы, передав её номер в параметры:
adapter.setLoadMoreListener(new ImageAdapter.LoadMoreListener() {
@Override
public void loadMore() {
Toast.makeText(MainActivity.this, "Конец", Toast.LENGTH_SHORT).show();
page++;
viewModel.loadImages(searchQuery, page);
adapter.endLoading();
adapter.setNoMore(true);
adapter.notifyDataSetChanged();
}
});
Возникает ошибка при запуске - Cannot call this method while RecyclerView is computing a layout or scrolling androidx.recyclerview.widget.RecyclerView
Код метода loadImages()
public void loadImages(String query, int page){
NetworkService networkService = NetworkService.getInstance();
compositeDisposable = new CompositeDisposable();
Disposable disposable = networkService.getJSONApi()
.getResponse(query, page)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Response>() {
@Override
public void accept(Response response) throws Exception {
deleteHits();
insertHits(response.getHits());
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Toast.makeText(getApplication(), throwable.getMessage(), Toast.LENGTH_SHORT).show();
}
});
compositeDisposable.add(disposable);
}