2017-09-16 3 views
0

Ich habe für das schon eine ganze Weile gesucht und habe keine richtige Antwort gefunden:Recyclerview: Verstecken Artikel ohne sie aus dem Arraylist zu entfernen

Gibt es eine Möglichkeit zu entfernen, ein Element aus einer RecyclerView, ohne zu entfernen es von der zugrunde liegenden ArrayList? Ich möchte eine Funktionalität hinzufügen, um Elemente aus der Liste vorübergehend zu verbergen, wenn eine bestimmte Bedingung erfüllt ist. Ich brauche diese Elemente später noch, aber die Verwaltung von 2 separaten ArrayLists scheint übermäßig kompliziert zu sein. Wenn ich die Sichtbarkeit des Elements innerhalb des Adapters auf gone einstelle, habe ich eine sichtbare Lücke, wo das Element war, also ist das keine Lösung.

Gibt es eine Möglichkeit, die 2 separate ArrayLists zu verwalten?

+0

Können Sie einen Screenshot von dem, wie die RecyclerView aussieht, wenn Sie die Sichtbarkeit des Artikels auf 'GONE' setzen? –

+0

Bitte geben Sie Ihren Adaptercode an. –

Antwort

0

Sie haben eine Arraylist von Objekttyp Sie ein Modell/pojo Klasse von Objekttyp

haben während JsonData von JsonResponse Iterieren nur in Objekttyp Modellklasse Booleschen Wert true/false übergeben. Die Daten, die Sie anzeigen möchten, machen es wahr oder falsch, später können Sie den 'false-Wert' auf 'wahr' für Ihre Model-Klasse setzen.

Hoffe, das wird funktionieren.

+0

Ich denke, es geht darum, ganze Zeilen zu verstecken, nicht einzelne Ansichten. –

+0

Machen Sie das Adapterlayout (row_item) in der Aktivität "mappen" und setzen Sie den Adapter in recyclerview/Listview, bevor Sie Daten vom Server laden. Nachdem Sie die Daten erhalten haben, tun Sie 'adapter.notifyDataSetChanged' nicht, damit Ihre Listenansicht leer bleibt. Wann immer Sie wollen, dass die Ansicht angezeigt wird, tun Sie einfach notifyDataSetChanged. –

+0

Warum sollten Sie den Adapter nach dem Abrufen der Daten nicht benachrichtigen? Außerdem ist eine Zeile immer noch nicht sicher, die verhindert, dass eine Ansicht in eine Zeile aufgebläht wird –

0

Ich denke, Sie müssen tatsächlich aus dem Datenmodell entfernen. Andernfalls werden Sie entweder mit leeren Zeilen enden, oder Sie scrollen, die "versteckten" recycelten Elemente werden durcheinandergewürfelt.

Nur weil Sie die Arraylist entfernen, bedeutet das nicht, dass Sie keine weitere Liste hinzufügen können, um (vorübergehend) die entfernten Elemente zu speichern.

Zum Beispiel definieren dies im Adapter

private List<Item> removed = new ArrayList<>(); 

public void remove(int position) { 
    removed.add(items.get(position)); 
    items.remove(position); 
    notifyDataSetChanged(); 
} 

Wenn Sie eine bessere Funktionalität brauchen, um über die Elemente, die Sie entfernt haben, eine HashMap besser sein können.

Verwandte Themen