android:stackFromBottom="true" scheint nicht zu funktionieren, perfekt (reverse ListView mit Adapter)
Ok, lassen Sie mich erklären, was "funktioniert nicht einwandfrei" bedeutet.
Ich habe eine listview ohne das android:stackFromBottom="true"
parameter. Ich habe auch einen ArrayAdapter, der mit der regelmäßigen getItem(position)
. Ich nenne meinen webserver, die Daten auf asc-Datum um.
Diese Art und Weise das Element an der position 0 (Anfang) der Liste mit dem kleinsten Datum. Und ich kann scrollen oben->unten. Gut.
Fügte ich android:stackFromBottom
und jetzt sehe ich, dass jetzt können Sie beginnen, Blättern von unten->Spitze, aber das Element an der position 0 ist immer noch das oberste Element und ist die kleinste Datum. Also der adapter hat sich nicht geändert, seine um.
Der einzige Weg, um dieses Problem zu lösen, ist zu ändern getItem(getCount()-1-position)
im inneren des Adapters. Allerdings füge ich hinzu und Benachrichtigen Sie den adapter und den adapter noch die Elemente auf der Unterseite.
Ich denke, dass die Struktur ListView -> Adapter -> Row Views
so egal, die stackFromBottom
Wert, es ist nur ein Kind, den adapter. Richtig?
Jedenfalls, wie kann ein ListView mit Adapter in umgekehrter Reihenfolge?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen schönen eleganten Weg, dies zu tun ist, überschreiben Sie Ihre
Adapter.getItem()
- Methode zur Rückgabe der Gegenstände selbst in umgekehrter Reihenfolge.Dies ist ein gutes Muster für eine
Adapter
als es nicht erforderlich, dass wir Ihre Daten unterschiedlich sortiert, nur bei der Anzeige (es könnte overhead bei der Sortierung der Liste, oder einen anderen Grund, warum die ursprüngliche Reihenfolge ist wichtig, in einem anderen Teil der app).Stattdessen ist es der adapter ist, zeigt die änderung ohne Auswirkungen auf die zugrunde liegenden Daten eingestellt.
Hier ist was ich benutzt habe:
Diese basiert auf @mes s Antwort zu dieser Frage im Zusammenhang:
Haben Sie einen Blick auf diesen thread für eine Diskussion über andere mögliche Lösungen.
Ich überschätzt
android:stackFromBottom
macht. Was es im Grunde tut, ist, eine ähnliche zu "gravity : unten". Es nicht hinzufügen, Elemente in umgekehrter Reihenfolge, aber es macht einfach den Inhalt ausgerichtet auf den Boden der listview.Ich bin noch auf der Suche nach einem reverse-adapter-Lösung.
getItem
Methode.Versuchen, diese Hoffnung, dies wird Ihnen helfen.
Ich würde vorschlagen, zu verwenden, Komparator, um das Objekt zurückgeben, basierend auf dem Datum, in dem je von Ihnen gewünschten Reihenfolge. Dabei wird es sicherstellen, dass die Daten immer in der Reihenfolge, die Sie wollen und nicht was der server sendet. Sie können überprüfen, wie Sie mit sort hier
Vielleicht sollten Sie es mit
AbsListView.setTranscriptMode(int)
ich habe eine chat-app und ich bieten zwei Modi der Anzeige Gespräch - von unten oder von oben überAbsListView.setStackFromBottom(boolean)