это мой код для моего in Основная активность:
Код: Выделить всё
viewModel = new ViewModelProvider(this ,
ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication()))
.get(PhotoDataSourceFactory.class);
Lifecycle lifecycle = getLifecycle();
viewModel.setLifecycle(lifecycle);
recyclerView = findViewById(R.id.recyclerView);
PhotosAdapter adapter = new PhotosAdapter(Photos.CALLBACK);
recyclerView.setAdapter(adapter);
viewModel.getSearchResults().observe(this, listPagingData -> adapter.submitData(lifecycle, listPagingData));
Код: Выделить всё
public class PhotoDataSourceFactory extends ViewModel {
Lifecycle lifecycle;
private static final String TAG = "PhotoDataSourceFactory";
public PhotoDataSourceFactory() {
}
public void setLifecycle(Lifecycle lifecycle){
this.lifecycle = lifecycle;
}
public LiveData
>> getSearchResults(){
PagingConfig config = new PagingConfig(20, 100, false);
Pager pager = new Pager(config, new Function0() {
@Override
public PagingSource invoke() {
return new PhotoSource();
}
});
return PagingLiveData.cachedIn(PagingLiveData.getLiveData(pager),lifecycle);
}
}
Код: Выделить всё
public class PhotosAdapter extends PagingDataAdapter
{
private static final String TAG = "PhotosAdapter";
public PhotosAdapter(@NotNull DiffUtil.ItemCallback diffCallback) {
super(diffCallback);
}
@NonNull
@Override
public PhotoViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.list_photos,parent,false);
return new PhotoViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull PhotoViewHolder holder, int position) {
Glide.with(holder.itemView.getContext()).load(getItem(position).getUrl()+".png").into(holder.photo);
holder.textView.setText(getItem(position).getTitle());
}
public class PhotoViewHolder extends RecyclerView.ViewHolder{
ImageView photo;
TextView textView;
public PhotoViewHolder(@NonNull View itemView) {
super(itemView);
photo = itemView.findViewById(R.id.imageView);
textView = itemView.findViewById(R.id.textView);
}
}
}
Код: Выделить всё
public class PhotoSource extends ListenableFuturePagingSource {
GetDataService dataService;
private static final String TAG = "PhotoSource";
@NotNull
@Override
public ListenableFuture loadFuture(@NotNull LoadParams loadParams) {
Executor executor = Executors.newSingleThreadExecutor();
dataService = RetrofitInstance.getInstance().create(GetDataService.class);
Long currentPage = loadParams.getKey()!=null ? loadParams.getKey() : (long)1;
ListenableFuture photos = dataService.getAllPhotos(currentPage);
ListenableFuture page = Futures.transform(photos, new Function() {
@NullableDecl
@Override
public LoadResult.Page apply(@NullableDecl List input) {
return new LoadResult.Page(
Collections.singletonList(input),
currentPage == 1 ? currentPage : currentPage-1,
input.isEmpty() ? null : currentPage+1
);
}}, executor);
Log.d(TAG, "loadFuture: Heererereree");
ListenableFuture partialLoad = Futures.catching(page, HttpException.class, LoadResult.Error::new, executor);
return Futures.catching(partialLoad, IOException.class, LoadResult.Error::new, executor);
}
@Nullable
@Override
public Long getRefreshKey(@NotNull PagingState pagingState) {
return null;
}
}
Мне не удалось почерпнуть ничего существенного из документации Google на странице 3 в Java, чтобы решить эту проблему. пытался найти видео о пейджинге 3 в Java, но, к сожалению, никто не рассмотрел пейджинг на Java.
если есть кто-нибудь, кто делал это (пейджинг 3) в Java, пожалуйста, если возможно, добавьте ссылку на ваш github тоже
заранее спасибо
Подробнее здесь: https://stackoverflow.com/questions/671 ... g-paging-3
Мобильная версия