12

Mam EndlessRecyclerView na końcu NestedScrollView. EndlessRecyclerView oznacza: gdy użytkownik przewija do końca recyklera, wyświetla więcej danych. To jest już zaimplementowane i działające gdzie indziej, ale kiedy umieszczę recyclerView wewnątrz NestedScrollView zdarzeń nie strzela. projektRecyclerView ScrollListener wewnątrz NestedScrollView

XML:

<NestedScrollView> 

    <Other views/> 

    <EndlessRecyclerView/> 

</NestedScrollView > 

Kod:

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

Jak uzyskać przewijania wydarzenie dla powyższego przypadku?

Wiem, że nie jest dobrze mieć dwa przewijane widoki w sobie. Ale jak mam powyższy przypadek bez dwóch przewijanych widoków?

Już następnie ten link, ale to nie działa: scroll event for recyclerview inside scrollview android

Odpowiedz

19

Aby osiągnąć nieskończoną przewijanie widoku recyklera, który jest pod NestedScrollView, można użyć "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 
       } 
      } 
     }); 

Tu v.getChildCount() -1 powinien dać ci widok recyklera, dla którego wdrażasz niekończące się przewijanie.

Również scrollY > oldScrollY potwierdza, że ​​strona jest przewijana w dół.

referencyjny: NestedScrollView.OnScrollChangeListener

+0

Niesamowite Man spędzam cały dzień poważnie rozwiązać go zrobić to w dwóch liniach. Świetne to ... Ale jak mogę uzyskać widoczne elementy i wszystko, aby móc pobrać nowe rekordy na serwerze? –

+0

@RahulVats W powyższym kodzie, gdy warunek if jest spełniony, oznacza to, że użytkownik przewinął się całkowicie, a ostatni element jest widoczny. Załóżmy, że masz 100 przedmiotów i początkowo załadowano 20 elementów. Jeśli powyższy warunek zostanie spełniony, możesz pobrać następny zestaw danych (np. 21-40) ze swojego serwera. W każdym razie możesz odesłać ten link do faktycznego zapytania: https://stackoverflow.com/questions/40726438/android-detect-when-the-last-item-in-a-recyclerview-is-visible?noredirect=1&lq= 1 – Govind