12

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

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 
     } 
    }); 

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

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

я уже выполнил эту ссылку, но она не работает: scroll event for recyclerview inside scrollview android

ответ

19

Для достижения бесконечной прокрутки для просмотра ресайклера, который находится под 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 должен дать вам вид ресайклера, для которого вы используете бесконечную прокрутку.

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

Ссылка: NestedScrollView.OnScrollChangeListener

+0

Удивительный Человек я провожу целый день серьезно, чтобы решить ее вы сделаете это в две строки. Отличный этот ... Но теперь, как я могу получить видимые элементы и все, чтобы я мог получать новые записи на сервере? –

+0

@RahulVats В приведенном выше коде при выполнении условия if это означает, что пользователь полностью прокручивается, и последний элемент виден. Допустим, у вас есть 100 предметов, и изначально загружено 20 предметов. Если вышеуказанное условие выполнено, вы можете загрузить следующий набор данных (например: 21-40) со своего сервера. В любом случае, вы можете ссылаться на эту ссылку для своего фактического запроса: https://stackoverflow.com/questions/40726438/android-detect-when-the-last-item-in-a-recyclerview-is-visible?noredirect11&lq= 1 – Govind

Смежные вопросы