Класс ViewModel, внутри которого мы загружаем pagedlist, используя источник данных.
public class RecipeListViewModel extends ViewModel {
public LiveData<PagedList<RecipeListPojo>> mutableLiveData;
public void init(RecipeFrom recipeFrom, RecipeDao recipeDao) {
mutableLiveData = new
LivePagedListBuilder(recipeDao.getRecipeList(),10).build();
}
}
Это мой дао, в котором мы выбираем данные в виде фабрики источников данных.
@Dao
public interface RecipeDao {
@Query("select * from recipe")
public DataSource.Factory<Integer, RecipeListPojo> getRecipeList();
}
Внутри моего RecipeListPojo я создал DiffCallBack.
public static DiffUtil.ItemCallback<RecipeListPojo> diffCallback=new
DiffUtil.ItemCallback<RecipeListPojo>() {
@Override
public boolean areItemsTheSame(RecipeListPojo oldItem, RecipeListPojo
newItem) {
return oldItem.getId()==newItem.getId();
}
@Override
public boolean areContentsTheSame(RecipeListPojo oldItem, RecipeListPojo
newItem) {
return oldItem.equals(newItem);
}
};
Внутри своей деятельности я получаю список с помощью наблюдателя и настраиваю свой адаптер.
arrayListObserver=new Observer<PagedList<RecipeListPojo>>() {
@Override
public void onChanged(@Nullable PagedList<RecipeListPojo> recipePojos) {
if(recipePojos!=null)
{
recipeAdapter.submitList(recipePojos);
recyclerView.setAdapter(recipeAdapter);
progressBar.setVisibility(GONE);
}
}
};
recipeFrom=new RecipeFrom.RecipeFromBuilder(fromActivity).build();
recipeDao=GlobalApplication.recipeRoomDatabase.getRecipeDao();
recipeListViewModel.init(recipeFrom,recipeDao);
recipeListViewModel.mutableLiveData.observe(this,arrayListObserver);
Вот так выглядит мой адаптер.
public class RecipeListAdapter extends
PagedListAdapter<RecipeListPojo,RecipeListAdapter.RecipeListHolder> {
private LayoutInflater inflater;
private Context context;
public RecipeListAdapter()
{
super(RecipeListPojo.diffCallback);
}
@Override
public RecipeListHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
context=parent.getContext();
inflater=LayoutInflater.from(context);
View rootView = inflater.inflate(R.layout.one_item_recipe_list, null,
false);
return new RecipeListHolder(rootView);
}
@Override
public int getItemCount() {
return super.getItemCount();
}
}
Библиотека используется-
// Paging
implementation "android.arch.paging:runtime:1.0.0-rc1"