RecyclerView ScrollListener внутри NestedScrollView


У меня есть EndlessRecyclerView в конце NestedScrollView. EndlessRecyclerView означает: когда пользователь прокручивает нижнюю часть recyclerView, он загружает больше данных. Это уже реализовано и работает в другом месте, но когда я помещаю recyclerView внутрь NestedScrollView, события OnScrollListener не срабатывают.

XML-дизайн:

<NestedScrollView>

     <Other views/>

     <EndlessRecyclerView/>

</NestedScrollView >

Код:

recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            // This is never fired! Here is where I implement the logic of EndlessRecyclerView
        }
    });

Как получить событие прокрутки для приведенного выше случая?

Я знаю, что нехорошо иметь два прокручиваемых вида внутри друг друга. Но, как у меня вышеприведенный случай без имея два прокручиваемых вида?

Я уже перешел по этой ссылке, но она не работает: событие прокрутки для recyclerview внутри scrollview android

1 14

1 ответ:

Для достижения бесконечной прокрутки для вида recycler, который находится под NestedScrollView, вы можете использовать "NestedScrollView.OnScrollChangeListener "

nestedScrollView.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
            if(v.getChildAt(v.getChildCount() - 1) != null) {
                if ((scrollY >= (v.getChildAt(v.getChildCount() - 1).getMeasuredHeight() - v.getMeasuredHeight())) &&
                        scrollY > oldScrollY) {
                        //code to fetch more data for endless scrolling
                }
            }
        });

Здесь v.getChildCount() -1 должен дать вам вид recycler, для которого вы реализуете бесконечную прокрутку.

Также scrollY > oldScrollY подтверждает, что страница прокручивается вниз.

Ссылка: NestedScrollView.OnScrollChangeListener