Recyclerview in Nested Scrollview scrollen, aber nicht schnell wie normale Recyclerview oder Nested Scrollview

96

Ich benutze RecyclerViewinnen NestedScrollViewund es funktioniert. Aber wenn ich RecyclerViewdrinnen LinearLayoutoder so benutze , wird je nach Geste mit unterschiedlicher Geschwindigkeit gescrollt. Die Schriftrolle hört auf eine Geste und wenn ich nur ein wenig nach oben rutsche, dann scrollt sie ein wenig, während wenn ich sehr schnell nach oben rutsche, dann sehr schnell. Jetzt ist mein Problem, dass RecyclerViewinnen NestedScrollViewsicherlich scrollen, aber schnelles Scrollen nicht funktioniert. Allerdings schieben ich auf schnell oder langsam, RecyclerViewoder NestedScrollViewnur bewegen ein wenig.

Wie kann ich meine NestedScrollViewoder RecyclerViewinnerhalb dieser Bildlaufansicht mit unterschiedlicher Geschwindigkeit scrollen lassen?

Aung Si Min Htet
quelle
3
recyclerView.setNestedScrollingEnabled (false); Das funktioniert wirklich !!
Aung Si Min Htet
Die Lösung von stackoverflow.com/questions/27083091/… finden Sie hier.
maruti060385
Bitte verwenden Sie open fun setNestedScrollingEnabled (aktiviert: Boolean): Unit Hoffe, es wird Ihnen helfen
Int0TheRainb0w

Antworten:

265

Versuchen

recyclerView.setNestedScrollingEnabled(false);
Yang Peiyong
quelle
14
Mit dieser Einstellung recycelt recyclerview jedoch keine Ansichten! Was ist deine Vorstellung davon?
Mai,
Tatsächlich füge ich zwei oder mehr Recycler-Ansichten mit unterschiedlichen Layout-Managern (z. B. lineares Layout und Raster-Layout) in mein Layout ein, die auch Banner und andere Ansichten enthalten. Um die Recycler-Ansicht so zu handhaben, fügen Sie all dies für mich in den Fix für die verschachtelte Bildlaufansicht ein.
Aung Si Min Htet
24
Ich weiß nicht, wie diese Antwort so viele positive Stimmen bekommen hat. Wenn Sie den verschachtelten Bildlauf deaktivieren, wird der Zweck dadurch aufgehoben. Was ist, wenn ich verschachtelte Schriftrollen und Recycler verwenden möchte? So etwas wie CoordinatorLayout, AppBarLayout und RecyclerView?
Jimit Patel
Danke @JimitPatel, das ist genau mein Problem im Moment. Ich habe eine Recyclingansicht in einer Nestedscroll-Ansicht und kann nicht scrollen. stackoverflow.com/questions/41259756/…
Karoly
1
@Karoly muss verschachtelte Schriftrollen anpassen ... Ich habe das ... Werde das in ein paar Stunden posten ... Derzeit bin ich auf Reisen. Ich habe dieses Problem im Parallaxeeffekt mit der Recycler-Ansicht nach der Symbolleiste konfrontiert.
Jimit Patel
53

Standardmäßig setNestedScrollingEnabledfunktioniert nur nach API-21.

Sie können das ViewCompat.setNestedScrollingEnabled(recyclerView, false);verschachtelte Scrollen vor und nach API-21 (Lollipop) deaktivieren. Link zur Dokumentation .

Ich hoffe das hilft!

Hemant Kaushik
quelle
22

Ich habe an Android 16 gearbeitet, wo dies nicht möglich war, die setNestedSCrollEnabled-Methode zu verwenden.

Was ich am Ende tue, um RecyclerView daran zu hindern, Schriftrollen zu verarbeiten.

Wie in LinerLayoutManager habe ich canScrollHorizontally, canScrollVertically gemacht, um standardmäßig false zurückzugeben.

myRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false){
            @Override
            public boolean canScrollHorizontally() {
                return false;
            }

            @Override
            public boolean canScrollVertically() {
                return false;
            }
        });
Zain Ali
quelle
Das hat bei mir tatsächlich funktioniert. Ich hatte eine RecyclerView in einer LinearLinear in einer ScrollView.
FonzTech
9

Nach mehreren Iterationen fand ich eine Lösung.

  1. Wenn Sie RecyclerView verwenden, gilt Folgendes:

    recyclerView.setNestedScrollingEnabled(false);
  2. Wenn Sie LinearLayout in NestedScrollingView verwenden, nehmen Sie das LinearLayout in eine normale ScrollView und setzen Sie den Bildlauf auf

    scrollView.setNestedScrollingEnabled(false);
Sarthak Gandhi
quelle
2

android: overScrollMode = "nie

  <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>
Maryam Azhdari
quelle
1

Sie können ScrollView mit der ExtendRecyclerView-Klasse verwenden, die die onMeasure-Methode überschreibt. Das ist für mich in Ordnung!

@Override
protected void onMeasure(int widthSpec, int heightSpec) {
    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
    super.onMeasure(widthSpec, expandSpec);
}
Quý Nguyễn Nam
quelle
1
recyclerView.setNestedScrollingEnabled(false);

Wird manchmal nützlich sein. Aber es ist nicht immer ratsam. Weil es die Ansichtsrecyclingfunktion in der Recylcer-Ansicht deaktiviert.

Alternativen:

Probieren Sie CollapsiveToolbarLayout mit Recycler-Ansicht aus. Fügen Sie andere Ansichten in das CollapseiveTollbar-Layout ein.

Rajesh.k
quelle
0

Ich habe auch dieses Problem getroffen. Und aktualisieren Sie, 26.1.0um es zu beheben.

linkaipeng
quelle
-1

In meinem Fall habe ich alle Bilder in einem Zeichenordner abgelegt, der im Ordner drawable-xxxhdpi installiert ist. Deshalb ist meine Bildschirm-Benutzeroberfläche verzögert.

Mayuresh Deshmukh
quelle
-3

Sie sollten die Recycler-Ansicht in ein beliebiges Layout wie LinearLayout einbinden und die RecyclerView-Größe auf konstant einstellen, z. B. 800 dp. Dies ermöglicht einen reibungslosen Bildlauf und die Recycler-Ansicht wird während des Bildlaufs weiterhin recycelt.

<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>

Thror
quelle
1
Dies ist eine gute Antwort, da sie den Weg zur Behebung des Problems mit der Schleuderrolle zeigt, ohne den Hauptvorteil von RecyclerView zu beeinträchtigen, indem nur die sichtbaren Ansichten geladen und recycelt werden, wenn sie außer Sichtweite gescrollt werden. Die Leute haben es vielleicht herabgestimmt, weil ein fester Wert wie 800 dp nicht in allen Bildschirmgrößen und -ausrichtungen funktioniert, aber der Wert layout_height könnte programmgesteuert berechnet und eingestellt werden - ein bisschen chaotisch, aber es löst beide Probleme.
jk7
-3

Das ist WAI. Das NestedScrollView misst seine untergeordneten Elemente mit der Spezifikation "Nicht angegeben". Das Kind kann so viel wachsen, wie es will.

Dies entspricht im Wesentlichen der Höhe von NSV und RV. Was das Wohnmobil betrifft, glaubt es, dass es vollständig angezeigt wird.

Wickeln Sie Ihr Wohnmobil mit einem LL ein und geben Sie Ihrem Wohnmobil eine Höhe. Das LL würde die Kennzahlspezifikation nicht auf NICHT SPEZIFIZIERT setzen, sodass das Wohnmobil korrekt innerhalb seiner festgelegten Höhe von den von Ihnen bereitgestellten DPs scrollen würde.

Der einzige Nachteil dieser Methode ist, dass Sie auf Ihrem Wohnmobil kein Match-Elternteil erstellen können.

Muhammad Ahmed AbuTalib
quelle