Wie macht man RecyclerView flüssig?

9

Das ist mehr wie eine generische Frage, aber nach vielen Suchen und Versuchen kann ich nicht verstehen, warum das so schwer zu erreichen ist. Dies ist die Antwort, die ich am nächsten finde, aber immer noch nicht umsetzen kann.

Um genau zu sein, verwende ich RecyclerView mit GridLayoutManager. Alles, was ich will, ist das Raster-Layout, um reibungslos zu scrollen (wie Standard Gallary App), nichts Besonderes, aber die Standard-Implementierung des Grid-Layout-Manager scrollt die Ansicht in einer "ruckartigen" Art und Weise. Ich habe versucht, die Methode von oben Link aber erfolglos zu implementieren.

Ich habe auch versucht, LinearSmoothScroller zu implementieren, aber ich bin mir nicht sicher, wie man die Methode computeScrollVectorForPosition implementieren kann. Googles Dokumentation zu computeScrollVectorForPosition hat buchstäblich 0 Wörter.

Ich fand dieses dreiteilige Tutorial , aber es war sehr wenig hilfreich. Alles, was ich fragen möchte, ist: Kann es irgendeinen Template-Code geben, den wir in LinearSmoothScroller implementieren können, oder indem wir RecyclerView.SmoothScroller erweitern und ein reibungsloses Scrollen erreichen? Auch wenn der Code im Rasterlayout von der Anzahl der Elemente und Elemente pro Zeile abhängt, muss es eine einfache Methode geben. Fehle ich hier etwas?

    
rockfight 06.07.2015, 15:04
quelle

6 Antworten

28

Die typische Quelle für "ruckelndes" Scrollen in Android ist, dass die App zu viel Zeit im Hauptanwendungs-Thread benötigt, um die Benutzeroberfläche zu aktualisieren. Im Fall von RecyclerView würde dies bedeuten, dass zu viel Zeit in onBindViewHolder() oder möglicherweise in onCreateViewHolder() benötigt wird. Diese müssen jeweils in Millisekunden zurückgegeben werden, was bedeutet, dass Sie keine Festplatten-E / A oder Netzwerk-E / A in ihnen ausführen können.

  

denke, ich habe das Problem gefunden. Ich verwende holder.photo.setImageBitmap (BitmapFactory.decodeFile (itemList.get (position) .get AbsolutePath ())); auf onBindViewHolder () und die Bilddatei ist etwa 100kb jeweils mit etwa einem Dutzend Bilder in der Liste

Ja, das wird Festplatten-I / O und Bilddecodierung im Hauptanwendungs-Thread machen. Das wird langsam genug sein, um Jank in der UI zu verursachen (d. H. "Ruckelndes" Scrollen).

Ziehen Sie eine Bildladebibliothek wie Picasso oder Universal Image Loader in Betracht, da diese Ihre ImageView asynchron aus der Bitmap auffüllen können.

In dieser Beispielanwendung wird der Universal Image Loader verwendet, um den Inhalt von% zu füllen. co_de% (mit RecyclerView ), wobei die Datenquelle die verfügbaren Videos auf dem Gerät sind.

    
CommonsWare 06.07.2015, 15:27
quelle
12

Fügen Sie dies hinzu, wenn Sie in Ihrer Aktivität oder in Ihrem Fragment eine Recycler-Ansicht festgelegt haben

%Vor%

setNestedScrollview (false) erledigt die Arbeit für Sie.

    
Ahmed Raza 15.04.2017 04:06
quelle
1
%Vor%     
Bishwajeet Biswas 19.10.2016 15:24
quelle
0

Ich habe gerade mit diesem Problem konfrontiert, und die Deaktivierung des verschachtelten Scrolls hat es behoben. Mach es so:

%Vor%

Oder Sie können den Wert in der XML-Datei ändern, in der Sie RecyclerView definiert haben:

%Vor%     
Arman Ramezanzadeh 13.02.2018 10:46
quelle
0
%Vor%     
Tarun Umath 26.03.2018 12:01
quelle
-1

füge das einfach hinzu

%Vor%

in der Recyclerview-XML

    
Sagar Yadav 22.08.2016 13:13
quelle