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 ответ:
Для достижения бесконечной прокрутки для вида 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
подтверждает, что страница прокручивается вниз.