Für meine App verwende ich ein RecyclerView
Inside A, ScrollView
bei dem RecyclerView
die Höhe basierend auf dem Inhalt dieser Bibliothek verwendet wird . Das Scrollen funktioniert, aber es funktioniert nicht reibungslos, wenn ich über das Bildlauf scrolle RecyclerView
. Wenn ich über das Bild ScrollView
selbst scrolle, läuft es reibungslos.
Der Code, mit dem ich Folgendes definiere RecyclerView
:
LinearLayoutManager friendsLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext(), android.support.v7.widget.LinearLayoutManager.VERTICAL, false);
mFriendsListView.setLayoutManager(friendsLayoutManager);
mFriendsListView.addItemDecoration(new DividerItemDecoration(getActivity().getApplicationContext(), null));
Die RecyclerView
in der ScrollView
:
<android.support.v7.widget.RecyclerView
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:id="@+id/friendsList"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android
android-recyclerview
android-scrollview
android-scroll
Bart Bergmans
quelle
quelle
androidx.constraintlayout.widget.ConstraintLayout
die Ihr Problem ohne komplexe Implementierungen lösen wirdAntworten:
Versuchen Sie Folgendes:
Alternativ können Sie Ihr Layout mithilfe der Support-Designbibliothek ändern. Ich denke, Ihr aktuelles Layout ist ungefähr so:
Sie können dies ändern zu:
Dies ist jedoch ein längerer Weg. Wenn Sie mit dem benutzerdefinierten linearen Layout-Manager einverstanden sind, deaktivieren Sie einfach das verschachtelte Scrollen in der Recycler-Ansicht.
Bearbeiten (03.04.2016)
Die
v 23.2
Veröffentlichung der Support-Bibliotheken enthält jetzt in allen Standardeinstellungen eine werkseitige Funktion zum Umschließen von InhaltenLayoutManager
. Ich habe es nicht getestet, aber Sie sollten es wahrscheinlich der Bibliothek vorziehen, die Sie verwendet haben.quelle
setNestedScrollingEnabled(false)
funktionierte nur, wenn ich stattdessen dieScrollView
für aNestedScrollView
ausschaltete.setNestedScrollingEnabled(false)
gab mir wieder reibungsloses Scrollen mit meinerRecyclerView
Innenseite einesScrollView
- Danke! Aber ich verstehe immer noch nicht, warum das funktioniert ...? Was bedeutet es wirklich, verschachteltes Scrollen auf falsch zu setzen?android:nestedScrollingEnabled="false"
nur für API 21+ funktioniert,v.setNestedScrollingEnabled(false)
für <21 jedoch in Ordnung ist.RecyclerView
Problem mit wrap_content auftritt,ScrollView
das nur auf Marshmallow / Nougat-Geräten (API 23, 24) auftrittIch musste nur Folgendes verwenden:
in meinem
onCreateView()
Methode.Vielen Dank!
quelle
Sie können diesen Weg entweder verwenden:
Fügen Sie diese Zeile Ihrer XML-Datei recyclerView hinzu:
Oder im Java-Code:
Hoffe das hat geholfen.
quelle
Sie können sowohl mit XML als auch programmgesteuert versuchen. Das Problem, mit dem Sie möglicherweise konfrontiert sind, ist (unter API 21), dass es mit XML nicht funktioniert. Es ist daher besser, es programmgesteuert in Ihrer Aktivität / Ihrem Fragment festzulegen.
XML-Code:
Programmatisch:
quelle
Die Verwendung der verschachtelten Bildlaufansicht anstelle der Bildlaufansicht hat mein Problem gelöst
quelle
Ich hatte ähnliche Probleme (ich habe versucht, verschachtelte RecyclerViews wie das Google PlayStore-Design zu erstellen). Der beste Weg, um damit umzugehen, besteht darin, die untergeordneten RecyclerViews in Unterklassen zu unterteilen und die Methoden 'onInterceptTouchEvent' und 'onTouchEvent' zu überschreiben. Auf diese Weise erhalten Sie die vollständige Kontrolle über das Verhalten dieser Ereignisse und können schließlich einen Bildlauf durchführen.
quelle
Das Ersetzen von ScrollView durch NestedScrollView führte zu einem reibungslosen Bildlauf nach unten.
quelle
Wenn Sie VideoView oder Widgets mit hohem Gewicht in Ihren untergeordneten Ansichten verwenden, behalten Sie Ihre RecyclerView mit Höhe
wrap_content
in einer NestedScrollView mit Höhematch_parent
Dann funktioniert das Scrollen so perfekt, wie Sie es möchten.Zu Ihrer Information,
Danke Micro das war von deinem Hinweis!
karthik
quelle
Zusammenfassung aller Antworten (Vor- und Nachteile)
Für einzelne Recyclingansichten
Sie können es im Koordinator-Layout verwenden.
Vorteil - Es werden nicht ganze Recyclerview-Elemente geladen. Also reibungsloses Laden.
Nachteil - Sie können nicht zwei Recycling-Ansichten in das Koordinator-Layout laden - dies führt zu Bildlaufproblemen
Referenz - https://stackoverflow.com/a/33143512/3879847
Für mehrere Wiederholungen mit minimalen Zeilen
Sie können in NestedScrollView laden
Vorteil - es wird reibungslos scrollen
Nachteil - Es werden alle Zeilen der Recycling-Ansicht geladen, sodass Ihre Aktivität mit Verzögerung geöffnet wird
Referenz - https://stackoverflow.com/a/33143512/3879847
Für mehrere Recylerviews mit großen Zeilen (mehr als 100)
Sie müssen mit recyclerview gehen.
Vorteil - Scrollen Sie reibungslos und laden Sie reibungslos
Nachteil - Sie müssen mehr Code und Logik schreiben
Laden Sie jede Recylerview mit Hilfe von Multi-Viewholdern in die Haupt-Recyclerview
Ex:
Referenz für Multi-ViewHolder - https://stackoverflow.com/a/26245463/3879847
quelle
XML-Code:
im Java-Code:
quelle
Oder Sie können einfach
android:focusableInTouchMode="true"
in Ihrer Recycler-Ansicht festlegenquelle
Dieser Code funktioniert in ConstraintLayout Android
quelle
Kotlin
Stellen Sie
isNestedScrollingEnabled
zufalse
für jeden RecyclerView , die unter der Scroll - Ansicht ist ,Verwenden des XML-Layouts
quelle