Ich verwende eine Liste zum Auffüllen eines ListView(). Der Benutzer kann Elemente zur Liste hinzufügen. Ich brauche jedoch die Elemente, die oben in der ListView angezeigt werden. Wie füge ich ein Element am Anfang meiner Liste ein, um es in umgekehrter Reihenfolge anzuzeigen?Neue Elemente oben in einem ListView anzeigen
Antwort
Sie sollten wahrscheinlich eine ArrayAdapter
verwenden und die insert(T, int)
Methode verwenden.
Ex:
ListView lv = new ListView(context);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.id...);
lv.setAdapter(adapter);
...
adapter.insert("Hello", 0);
Ich habe gerade meine Liste verschrottet und nutze den Adapter. Hat super funktioniert! Vielen Dank. – rphello101
Gern geschehen! – aymeric
Standardmäßig fügt die Liste Elemente unten hinzu. Aus diesem Grund werden alle neuen Elemente, die Sie hinzufügen, unten angezeigt. Wenn Sie es in umgekehrter Reihenfolge wollen, sein kann, bevor Sie zu listadapter/Ansicht kehren Sie die Liste
Etwas wie:
Collections.reverse(yourList);
Gute Idee, aber ich fügte immer wieder Elemente in die Liste ein und änderte es ständig. Ich würde im Prinzip abwechselnd ein Element an jedem Ende der Liste hinzufügen. Da ich die Daten mit SharedPreferences speichern muss, die nur grundlegende Datentypen speichern, wäre es sehr mühsam, zwei Listen zu verfolgen. – rphello101
gefunden, was ich suchte. thankx – raj
Ist gut, aber nicht funktionieren, wenn Sie mit Objekten benutzerdefinierte + Tags versuchen! – delive
Das Listview die Daten anzeigt, wie es in der Datenquelle gespeichert ist.
Wenn Sie Ihre Datenbank hinzufügen, müssen am Ende die Elemente hinzugefügt werden. Wenn Sie also alle Daten über das Cursor-Objekt erhalten und es dem ArrayAdapter zuweisen, liegt es nur in dieser Reihenfolge vor. Sie sollten im Grunde versuchen, Daten an den Anfang der Datenbank zu stellen, anstatt am Ende vielleicht einen Zeitstempel zu haben.
Arraylist verwenden, können Sie es tun, indem Collections.reverse(arrayList)
oder wenn Sie SQLite verwenden, können Sie order by
verwenden.
Nein, ich denke, das ist falsch. Für die Listenansicht müssen Sie Array/Liste als Eingabe übergeben. In der Datenbank können Sie nichts tun, es sei denn, Sie haben Zeitstempel für das Einfügen. – kosa
@Nambari: Es tut mir leid. Was ich eigentlich meinte, war, dass die Daten mithilfe eines Cursor-Objekts aus der Datenbank abgerufen und in einen ArrayAdapter eingefügt werden. So etwas wie http://stackoverflow.com/questions/5717732/how-do-i-display-data-from-my-database-in-a-listview. Wird meine Antwort aktualisieren. Vielen Dank für Ihren Kommentar. – Swayam
Man konnte immer einen Zeitstempel in Ihre Objekte haben und Ihre Listenansicht auf dieser Grundlage sortieren ..
public class CustomComparator implements Comparator<YourObjectName> {
public int compare(YourObjectName o1, YourObjectName o2) {
return o1.getDate() > o2.getDate() // something like that.. google how to do a compare method on two dates
}
}
jetzt sortieren Sie Ihre Liste
Collections.sort(YourList, new CustomComparator());
Diese sollten Sie Ihre Liste so sortieren, dass das neueste Element an die Spitze geht
Sie können stattdessen immer eine LinkedList verwenden und dann die addFirst() -Methode verwenden, um Elemente zu Ihrer Liste hinzuzufügen, und es wird das gewünschte Verhalten haben (neue Elemente am Anfang der ListView).
Eine andere Lösung, ohne die ursprüngliche Liste zu ändern, außer Kraft setzen getItem() Methode in dem Adapter
@Override
public Item getItem(int position) {
return super.getItem(getCount() - position - 1);
}
aktualisiert: Beispiel
public class ChatAdapter extends ArrayAdapter<ChatItem> {
public ChatAdapter(Context context, List<ChatItem> chats) {
super(context, R.layout.row_chat, chats);
}
@Override
public Item getItem(int position) {
return super.getItem(getCount() - position - 1);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = inflater.inflate(R.layout.row_chat, parent, false);
}
ChatItem chatItem = getItem(position);
//Other code here
return convertView;
}
}
Dies ist eine sehr elegante Lösung. Ich habe eine kleine Änderung vorgenommen, damit ich sie in anonymen ArrayAdaptern verwenden kann, die die Datenelemente nicht verfügbar machen: 'return super.getItem (getCount() - 1 - position);' –
Dies funktioniert aber beim Scrollen des ersten Eintrags in der Liste erscheint wie ein Duplikat zur letzten Artikelliste. Ich denke, dieses Problem hat mit dem Recycling der Listview-Elemente zu tun (nicht sicher). –
Könnten Sie bitte erzählen, wie getItem() Methode im Adapter überschrieben wird? – Apurva
mBlogList ist eine Ansicht ... Recycler
mBlogList=(RecyclerView) findViewById(R.id.your xml file);
mBlogList.setHasFixedSize(true);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
mBlogList.setLayoutManager(mLayoutManager);//VERTICAL FORMAT
Sie können Element am Anfang der Liste hinzufügen: wie
arraylist.add(0, object)
dann wird es immer an der Spitze das neue Element angezeigt werden soll.
- 1. Elemente von oben in ListView füllen?
- 2. ListView flackert, wenn neue Elemente hinzugefügt werden
- 3. Summe der gruppierten Elemente in ListView anzeigen
- 4. Automatisch neue Elemente in ausstehenden Änderungen anzeigen
- 5. Android ListView Elemente nach oben ohne Listenansicht scrollen
- 6. Elemente dynamisch zu einem listView Android hinzufügen
- 7. ListView in einem anderen ListView
- 8. Datenbank in Listview anzeigen
- 9. ListView scrollt immer nach oben in reaktionsbereit
- 10. Alle Elemente in einem JSON-Array anzeigen
- 11. Android ListView nach oben scrollen
- 12. Loading listView in neue Aktivität
- 13. listView Auswählen mehrerer Elemente
- 14. Zugriff auf Elemente in einem Listview in Android
- 15. Get ListView Sichtbare Elemente
- 16. Auswählen mehrerer Elemente in ListView
- 17. Elemente in Listview richtig ausblenden
- 18. Aktualisieren bestimmter Elemente in ListView
- 19. ListView Unterelemente und Titel anzeigen
- 20. Android berechnen ListView Elemente
- 21. Listview falsche Anzeigen Spalten
- 22. Möglichkeiten zum Anzeigen von Exe-Icons in einem ListView
- 23. PubNative Android zeigen mehrere Anzeigen in einem Listview-
- 24. Liste der Ereignisse in einem GridView/Repeater/ListView anzeigen
- 25. anzeigen Eigenschaften der ausgewählten Elemente in Listview in Datagrid in WPF-Anwendung
- 26. Wie gruppiere ich Elemente in einem WPF ListView
- 27. Listview-Elemente programmgesteuert in Android erstellen
- 28. listview info in verschiedenen textviews anzeigen
- 29. WPF ListView in Registerkarten von TabControl mit anderem Inhalt anzeigen
- 30. ListView Elemente wiederverwenden mit Paddings
Woher stammen die Daten? Wenn Sie es aus einer Datenbank lesen, können Sie die Reihenfolge, in der die Abfrage zurückgegeben wird, jederzeit mit 'order by' oder äquivalent ändern. – MrLore