Как выполнить нумерацию страниц с рамкой Litho?

Я внедряю Retrofit APi для получения данных с сервера и показывать это в RecyclerView используя фреймворк Litho, и это хорошо. Как все мы знаем, когда у нас есть бесконечные данные, которые нужно показать в обзоре переработчиков, мы должны реализовать шаблон разбиения на страницы. И я знаю это, но я запутался, как реализовать это в среде Litho. Лито обеспечивает onScrollListener() метод:

final Component component = Recycler.create(context)
    .binder(recyclerBinder)
    .onScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            //
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            //
        })
    .build();

Я не знаю: как использовать индивидуальные EndlessRecyclerViewScrollListener за бесконечную прокрутку в лито?

1 ответ

Решение

Я добился успеха в реализации "бесконечной" модели прокрутки, используя recyclerBinder в пределах onScrolled метод OnScrollListener, Тривиальный пример будет следующим:

//Initialize the RecyclerBinder
recyclerBinder = new RecyclerBinder(c, new LinearLayoutInfo(getContext(), OrientationHelper.VERTICAL, false));

//Initialize a recycler component
Component component = Recycler.create(c)
                .onScrollListener(new RecyclerView.OnScrollListener() {
                    @Override
                    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                        super.onScrolled(recyclerView, dx, dy);

                        // use the recyclerBinder to determine what items at what position are visible - 
                        // (you could also use the findLastVisibleItemPosition() method depending on your implementation)
                        int firstVisibleItemPosition = recyclerBinder.findFirstVisibleItemPosition();

                        //check if it is within range relative to the current available items and is not loading (room to improve/modify logic pending use case)
                        if((recyclerBinder.getItemCount() - 5) <= firstVisibleItemPosition && !isLoading) {
                            //if so - use your service to get the next page
                            service.getNextPage();
                        }
                    }
                })
                .build();

Затем в методе обратного вызова - вы можете вставить свои элементы, начиная с количества элементов

public void callback(List<T> results) {
    int position = recyclerBinder.getItemCount();
    for(T result: results) {
        Component component = //assemble your component(s) ...
        ComponentInfo.Builder info = ComponentInfo.create().component(component);
        recyclerBinder.insertItemAt(position, info.build());
        position++;
    }
}
Другие вопросы по тегам