У меня возникла такая же проблема, что и вопрос здесь: Не получаю уведомления об обновлениях PagedList
Я реализовал библиотеку подкачки для моего приложения.Я загружаю список данных, который может быть очень большим.Веб-сервис возвращает только 20 элементов, и с помощью ключа вы можете получить следующие 20 элементов и так далее.Теперь это прекрасно работает, адаптер / ресивер-просмотр показывают первые 20 пунктов.Как только я прокручиваю вниз, новые элементы загружаются.Проблема в том, что мне нужно знать, когда загружаются новые элементы, и нужна ссылка на эти элементы.Мне нужно добавить каждый элемент в представление карты в верхней части списка.Как я могу получать уведомления об изменениях в моем списке страниц?Я пытался использовать addWeakCallback, но я не понимаю, как это работает.Я ожидаю, что мой Observer на ViewModel будет вызываться каждый раз при загрузке данных, но мой наблюдатель запускается даже до загрузки данных.Наблюдатель запускается с пустым списком, и я просто отправляю этот список в мой PagedListAdapter.Может кто-нибудь, пожалуйста, уточнить все это?Что я могу сделать, чтобы наблюдать за изменениями данных в моем pagedList?
Вот код:
Наблюдатель
Observer<PagedList<Result>> resultObserver = new Observer<PagedList<Result>>() {
@Override
public void onChanged(@Nullable PagedList<Result> results) {
if (mResultAdapter == null) {
mResultAdapter= new ResultAdapter(getActivity());
mResultRecycler.setAdapter(mResultAdapter);
mResultAdapter.submitList(results);
}
}
};
ViewModel
sourceFactory = new ResultDataSourceFactory(application.getApplicationContext());
PagedList.Config config = new PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setPageSize(20)
.setPrefetchDistance(5)
.build();
resultList = new LivePagedListBuilder<>(sourceFactory, config).build();
Источник данных
@Override
public void loadInitial(@NonNull LoadInitialParams<String> params, @NonNull final LoadInitialCallback<Result> callback) {
Webservices.loadSearchResponse(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
Response response = parse(response)
if (response != null) {
//Set search seed
searchSeed = response .getSearchSeed();
callback.onResult(response.getItemsList(), 0, 0);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
}
@Override
public void loadAfter(@NonNull LoadParams<String> params, @NonNull final LoadCallback<Response> callback) {
Webservices.loadSearchResponse(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
Result result = parse(response);
if (result!= null) {
searchSeed = result.getSearchSeed();
callback.onResult(result.getItemsList());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
}
Заранее благодарен за помощь!