Лучше всего использовать RendererRecyclerViewAdapter.
Шаг 1. добавьте ViewModel
интерфейс к вашему простому элементу
public class SimpleItem implements ViewModel {
/* your getters */
}
Шаг 2. Создайте ViewBinder
для вашего простого элемента
private ViewRenderer getSimpleViewBinder() {
return new ViewBinder<>(
R.layout.simple_item, /* your item layout */
SimpleItem.class, /* your model class */
(model, finder, payloads) -> {
/* your binding */
finder.setText(R.id.textView, model.getText());
});
}
Шаг 3. Расширьте DefaultCompositeViewModel
и добавьте уникальный идентификатор горизонтального элемента.
public class HorizontalViewModel extends DefaultCompositeViewModel {
private int mID;
public HorizontalViewModel(int ID, List<? extends ViewModel> items) {
super(items);
mID = ID;
}
public int getID() {
return mID;
}
}
Это ваш Горизонтальный предмет, который содержит все простые предметы внутри.
Шаг 4. Создайте HorizontalViewBinder
public class HorizontalViewBinder extends CompositeViewBinder<HorizontalViewModel> {
public HorizontalViewBinder(int layoutID,
int recyclerViewID,
Class<HorizontalViewModel> type) {
super(layoutID, recyclerViewID, type);
}
@Override
public void bindView(HorizontalViewModel model, CompositeViewHolder holder) {
super.bindView(model, holder);
holder.getRecyclerView().addOnScrollListener(new EndlessScrollListener() {
@Override
public void onLoadMore(int page, int totalItemsCount) {
holder.getAdapter().showLoadMore();
/* sendLoadMoreRequest(model.getID()); */
}
});
}
@NonNull
@Override
public CompositeViewHolder createViewHolder(ViewGroup parent) {
final CompositeViewHolder viewHolder = super.createViewHolder(parent);
viewHolder.getAdapter().registerRenderer(new LoadMoreViewBinder(R.layout.load_more));
/* don't forget to create load more layout */
return viewHolder;
}
}
Шаг 5. Создайте геттер для HorizontalViewBinder.
private ViewRenderer getHorizontalViewBinder() {
return new HorizontalViewBinder<>(
R.layout.horizontal_layout, /* your horizontal layout that contains RecyclerView */
R.id.recycler_view, /* an ID of RecyclerView */
HorizontalViewModel.class /* your created class, see Step 3 */
);
}
Шаг 6. Инициализируйте в своем фрагменте/активности основной RendererRecyclerViewAdapter.
RendererRecyclerViewAdapter mRecyclerViewAdapter = new RendererRecyclerViewAdapter();
mRecyclerViewAdapter.registerRenderer(new Horizontal().registerRenderer(getHorizontalViewBinder().registerRenderer(getSimpleViewBinder())); /* register HorizontalViewBinder and SimpleViewBinder */
mRecyclerViewAdapter.setItems(getYourList());
Шаг 7. Добавьте LoadMoreListener в основной RecyclerView
mRecyclerView.addOnScrollListener(new EndlessScrollListener() {
@Override
public void onLoadMore(int page, int totalItemsCount) {
mRecyclerViewAdapter.showLoadMore();
/* send request to a server */
}
});
Шаг 8. Создайте специальные ViewBinder для других ваших элементов: AdViewBinder, SomeAnotherViewBinder и зарегистрируйте их в своем адаптере. См. Шаг 1 и Шаг 2.
К вашему сведению: EndlessScrollListener — это ваша реализация LoadMoreListener.
Наслаждаться! :)
Если вам нужна дополнительная информация, см. вики-страницы: простые элементы, составные элементы, индикатор «Загрузить больше».
person
Vitaly
schedule
18.03.2018