Позвольте мне дать краткий обзор того, что я пытаюсь сделать. В общем, я новичок в этой библиотеке подкачки в Android Jetpack и пытаюсь реализовать выгружаемый список. Серверная часть уже выполнила часть разбиения на страницы по запросу (Бэкенд возвращает 25 элементов на страницу по умолчанию), поэтому все, что мне нужно сделать, это сделать запрос и указать страницу, которую я хочу отобразить, а затем элементы Мне нужно будет потом вернуться. Я смог отобразить и заставить работать loadInitial()
, но после того, как я прокрутил до самого нижнего элемента, он не сработал loadAfter()
.
Мои PagedListAdapter
и RecyclerView
очень прямолинейны, поэтому я не думаю, что размещение их здесь поможет. onCreateViewHolder
возвращает ViewHolder путем привязки данных. onBindViewHolder
просто вызывает метод внутри моего вьюхолдера и устанавливает элементы. Я не переопределяю метод getItem()
. Вот и все для моего адаптера и DiffCallback
.
Однако ниже приведены мои другие фрагменты кода. Обратите внимание, что я изменил имена переменных и методов для обеспечения конфиденциальности.
Моя конфигурация для LivePagedListBuilder:
public MyViewModel() {
PagedList.Config config =
new PagedList.Config.Builder()
.setPageSize(1)
.setPrefetchDistance(1)
.build();
items = new LivePagedListBuilder<>(myDataSourceFactory, config).build();
}
public LiveData<PagedList<Item>> getItems() {
return items;
}
Как я наблюдаю LiveData в своем представлении:
viewModel.getItems().observe(this, items -> {
adapter.submitList(items);
});
Мой источник данных: ItemKeyedDataSource
private int defaultPage = 1;
public void loadInitial(@NonNull LoadInitialParams<Integer> params, @NonNull
LoadInitialCallback<Item> callback) {
remoteRepository.getItems(String.valueOf(defaultPage))
...
}
public void loadAfter(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Item> callback) {
remoteRepository.getItems(String.valueOf(params.key))
...
}
public Integer getKey(@NonNull Item item) {
return defaultPage++;
}