Es ist nicht möglich, einen Algorithmus zum Ausfiltern von Elementen in einem RecyclerView basierend auf einem mit jedem Element gespeicherten Objekt zu schreiben

8

Ich habe mehrere Objekte in RecyclerView und für jedes Element wurde ein long Wert gespeichert. Ich verwende FastAdapter als Adapter für meine RecyclerView .

Angenommen, es gibt 7 Elemente in RecyclerView mit den langen Werten: 11122 , 12321 , -98811 , 8870 , -88009 , 3398 und -22113 .

Also, was ich tun möchte ist, ich möchte die Elemente basierend auf den oben angegebenen langen Werten mit dieser Logik filtern:

%Vor%

Ich habe verschiedene Dinge ausprobiert, aber es hat nichts geklappt.

UPDATE 1 : Elemente sind hier eine Art verschiedener Daten, die in CardView gespeichert sind und dann in RecyclerView angezeigt werden. Jede Karte enthält unterschiedliche Daten, von denen eine die oben angegebenen long -Werte sind. Ich möchte die Daten basierend auf diesen long -Werten filtern, die auf jeder Karte basierend auf der oben angegebenen Logik gespeichert sind.

Bitte helfen Sie mir bei diesem Problem und schlagen Sie einen Algorithmus oder Code vor, mit dem ich das erreichen kann.

    
Hammad Nasir 30.12.2016, 02:03
quelle

5 Antworten

6

Bei der Menge der angegebenen Informationen kann ich nur annehmen, dass l ein ausländischer Selektorwert ist, der die Elemente steuert, die in RecyclerView angezeigt werden. Kommentar unten, wenn dies nicht der Fall ist, werde ich versuchen, meine Antwort zu korrigieren.

Ich empfehle, eine benutzerdefinierte ViewAdapter zu implementieren, indem Sie die Liste der Elemente und die Selektorvariable l mit den entsprechenden Methoden einsenden:

%Vor%

Außerdem habe ich FastAdapter nie benutzt, aber ich nehme an, dass es einige Methoden geben muss, um sie zu überschreiben, wenn Sie ihre Klasse erweitern.

Aktualisieren

Da Sie Probleme haben, die Grundlagen der Verwendung von ViewAdapter zu verstehen, würde ich empfehlen, eine benutzerdefinierte ViewAdapter zu lernen und zu implementieren, bevor Sie eine Bibliothek verwenden. Hier finden Sie eine ausführliche Anleitung zum Implementieren von ViewAdapter für RecyclerView.

Nun, nachdem Sie den ViewAdapter implementiert haben, können Sie meinen Code verwenden, um Karten herauszufiltern. Im Prinzip speichert der Code eine Liste aller erforderlichen Daten in mItemList , während mDisplayList eine Liste ist, in der die anzuzeigenden Elemente gespeichert werden, die jedes Mal aktualisiert wird, wenn die Benutzerpräferenz gespeichert wird von über oder unter 1000 wird eingestellt. Jetzt muss diese mAboveThousand verwendet werden, um Daten in der RecyclerView aufzublasen.

    
abhi 01.01.2017 09:13
quelle
4

Sogar dein sehr einfacher Code würde funktionieren. Sie können die Anzahl der Objekte in diesem Bereich zählen und die Anzahl in diesem Bereich zurückgeben. Ich schlage vor, Sie versuchen, dies ohne FastAdapter zu tun, weil das Kernkonzept der Analyse der Daten basierend auf einem Filterwert zu Recht vollkommen solide ist. Sie können die Schleife durchlaufen und sie zählen, und Sie können die Schleife durchlaufen und das n-te Element zurückgeben.

    
Tatarize 01.01.2017 09:54
quelle
4

Wenn Sie FastAdapter weiterhin verwenden möchten, verfügt es über eine integrierte Filterfunktionalität (siehe Punkt 5 in der README des Projekts Beachten Sie, dass die filter -Methode nach withFilterPredicate und nicht davor aufgerufen werden sollte, wie dort gezeigt.

BEARBEITEN - nachdem Sie darauf hingewiesen haben, dass ich Sie vorher falsch verstanden habe - hier sind meine aktualisierten vorgeschlagenen Anweisungen:

Sie müssen die Logik des anzuzeigenden Sets auflösen (indem Sie die Kontrollkästchen im Dialog verwenden, den Sie im Kommentar erwähnt haben) und diese Informationen an den Filter übergeben, zum Beispiel:

%Vor%

Und wo Sie den Adapter einstellen (bevor die obige Zeile aufgerufen wird):

%Vor%

Alte Antwort

Nachdem ich gedacht hatte, dass Sie die Elemente anhand ihrer ms long-Werte filtern möchten, verwenden Sie ein externes l long-Kennzeichen:

Wenn in Ihrem Code angenommen wird, dass Ihre App zu der in der Frage erwähnten if kommt, entfernen Sie die fastItemAdapter.clear(); und anstelle der for -Schleife mit der if drinnen schreiben Sie

%Vor%

und irgendwo vor , vorzugsweise wo Sie den Adapter setzen (am wahrscheinlichsten in onCreate von MainActivity ) fügen Sie Folgendes hinzu:

%Vor%

(Nehmen wir an, dass GRModeClass die Klasse Ihrer Elemente ist und dass die long ms die Länge ist, auf die Sie verwiesen haben, die bestimmen sollte, ob das)

    
et_l 03.01.2017 08:54
quelle
3

Ich schätze, deine Klasse ist wie

%Vor%

Nun hoffe ich, dass Sie eine Funktion haben, die aufgerufen wird, wenn Sie einen Filter in Ihre RecyclerView setzen. Lassen Sie den Funktionsnamen toggleFilter .

%Vor%     
Reaz Murshed 06.01.2017 15:17
quelle
0

Sie können beim Abrufen von Firebase filtern.

l & lt; = 1000

%Vor%

l & gt; 1000

%Vor%     
uguboz 07.01.2017 21:26
quelle