Używam RecyclerView
wewnątrz NestedScrollView
i działa. Ale kiedy używam RecyclerView
środka LinearLayout
lub czegoś, przewija się z różną prędkością w zależności od gestu. Zwój nasłuchuje gestów i jeśli przesuwam się tylko trochę, to przewija się trochę, a jeśli przesuwam się bardzo szybko, to przewija się naprawdę szybko. Teraz mój problem polega na tym, że RecyclerView
wewnątrz z NestedScrollView
pewnością przewijanie, ale szybkie przewijanie nie działa. Jednak przesuwam się szybko lub wolno RecyclerView
lub NestedScrollView
tylko trochę przewijam.
Jak mogę przewijać widok przewijania NestedScrollView
lub RecyclerView
wewnątrz tego widoku z różną prędkością?
android
android-recyclerview
android-nestedscrollview
Aung Si Min Htet
źródło
źródło
Odpowiedzi:
próbować
recyclerView.setNestedScrollingEnabled(false);
źródło
Domyślnie
setNestedScrollingEnabled
działa tylko po API-21.Możesz użyć,
ViewCompat.setNestedScrollingEnabled(recyclerView, false);
aby wyłączyć zagnieżdżone przewijanie przed i po API-21 (Lollipop). Link do dokumentacji .Mam nadzieję, że to pomoże!
źródło
Pracowałem na Androidzie 16, gdzie nie można było użyć metody setNestedSCrollEnabled,
Co ostatecznie robię, aby uniemożliwić RecyclerView obsługę Scrolls.
Podobnie jak w LinerLayoutManager, utworzyłem canScrollHorizontally, canScrollVertically domyślnie zwraca wartość false.
myRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false){ @Override public boolean canScrollHorizontally() { return false; } @Override public boolean canScrollVertically() { return false; } });
źródło
Po kilku iteracjach znalazłem rozwiązanie.
Jeśli używasz RecyclerView, to:
recyclerView.setNestedScrollingEnabled(false);
Jeśli używasz LinearLayout wewnątrz NestedScrollingView, weź LinearLayout do normalnego ScrollView, a następnie ustaw jego przewijanie na
scrollView.setNestedScrollingEnabled(false);
źródło
android: overScrollMode = "nigdy
<android.support.v4.widget.NestedScrollView android:id="@+id/nestedScrollView" android:layout_width="match_parent" android:layout_height="match_parent" android:overScrollMode="never"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </android.support.v4.widget.NestedScrollView>
źródło
Możesz użyć ScrollView z klasą ExtendRecyclerView, która przesłania metodę onMeasure. To działa dla mnie!
@Override protected void onMeasure(int widthSpec, int heightSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthSpec, expandSpec); }
źródło
recyclerView.setNestedScrollingEnabled(false);
Przyda się czasami, ale nie zawsze jest to zalecane, ponieważ wyłącza funkcję przeglądania recyklingu w widoku recylcera.
Alternatywy:
Wypróbuj CollapsiveToolbarLayout z widokiem Recycler. umieszczaj inne widoki w układzie zwijanego paska narzędzi.
źródło
Ja też spotkałem się z tym problemem. I zaktualizuj, aby
26.1.0
to naprawić.źródło
W moim przypadku umieściłem wszystkie obrazy w folderze do rysowania zamiast folderu drawable-xxxhdpi, dlatego mój interfejs użytkownika ekranu jest opóźniony.
źródło
Powinieneś opakować widok recyklera w dowolny układ, taki jak LinearLayout i ustawić rozmiar RecyclerView na stałą, na przykład 800dp. Umożliwi to płynne przewijanie, a widok recyklera będzie nadal wyświetlać widoki recyklera podczas przewijania.
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="800dp" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> </LinearLayout>
źródło
To jest WAI. NestedScrollView mierzy swoje elementy podrzędne przy użyciu specyfikacji „nieokreślonej”. Dziecko też może rosnąć tak bardzo, jak chce.
To zasadniczo zrównuje wysokość NSV i RV. Jeśli chodzi o kamper, uważa, że jest on całkowicie pokazany.
Owiń RV LL i nadaj RV wysokość. LL nie ustawiłby specyfikacji miary jako NIEOKREŚLONE, więc RV prawidłowo przewijałby się w ustawionej wysokości niezależnie od podanych DP.
Jedyną wadą tej metody jest to, że nie będziesz w stanie dopasować rodzica w swoim kamperze.
źródło