В моем приложении у меня есть два объекта LiveData, один для получения элементов от 0-10 и второй для получения элементов от 11-20. Я пытаюсь загрузить данные в RecyclerView, но вместо 20 элементов первые 10 (0-10) заменяются новыми 10 (11-20). Вот что я пробовал:
recyclerView = findViewById(R.id.recycler_view);
adapter = new ItemsAdapter();
recyclerView.setAdapter(adapter);
viewModel = new ViewModelProvider(this).get(ItemListViewModel.class);
Для получения предметов от 0 до 10 я использую этот метод:
private void getInitialItems() {
ItemListLiveData liveData = viewModel.getItemsLiveData();
liveData.observe(this, itemtList -> adapter.submitList(itemtList));
}
Для получения предметов от 11 до 20 я использую этот метод:
private void getNextlItems() {
ItemListLiveData liveData = viewModel.getItemsLiveData();
liveData.observe(this, itemtList -> adapter.submitList(itemtList));
}
Это мой класс ViewModel:
public class ItemListViewModel extends ViewModel {
private ItemListRepository repository = new ItemListRepository();
ItemListLiveData getItemsLiveData() {
return repository.getItemListLiveData();
}
}
В хранилище я получаю элементы только с внутреннего сервера. Это мой класс адаптера:
public class ItemsAdapter extends ListAdapter<Item, ItemsAdapter.ItemViewHolder> {
ItemsAdapter() {
super(diffCallback);
}
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//Inflate the view
}
@Override
public void onBindViewHolder(@NonNull final ItemViewHolder holder, int position) {
//Bind the Item according to position
}
private static DiffUtil.ItemCallback<Item> diffCallback = new DiffUtil.ItemCallback<Item>() {
@Override
public boolean areItemsTheSame(@NonNull Item oldItem, @NonNull Item newItem) {
return oldItem.id.equals(newItem.id);
}
@Override
public boolean areContentsTheSame(@NonNull Item oldItem, @NonNull Item newItem) {
return oldItem.equals(newItem);
}
};
}
Я ожидаю, что при использовании DiffUtil.ItemCallback
получу оба списка в виде накопительного списка, поскольку все объекты различны. Даже если я передам оба списка одному и тому же адаптеру, у меня останется только десять элементов (11-20). Как использовать submit list
, чтобы в моем списке было 20 элементов, а не только 10 (11-20)?