Sto utilizzando un elenco per popolare un oggetto ListView(). L'utente è in grado di aggiungere elementi all'elenco. Tuttavia, ho bisogno che gli elementi siano visualizzati nella parte superiore di ListView. Come inserisco un articolo all'inizio della mia lista per visualizzarlo in ordine inverso?Visualizza nuovi elementi nella parte superiore di ListView
risposta
È consigliabile utilizzare uno ArrayAdapter
e utilizzare il metodo insert(T, int)
.
Es:
ListView lv = new ListView(context);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.id...);
lv.setAdapter(adapter);
...
adapter.insert("Hello", 0);
Ho appena scartato la mia lista e ho usato in modo eccessivo l'adattatore. Ha funzionato alla grande! Grazie. – rphello101
Prego! – aymeric
L'elenco predefinito aggiunge elementi nella parte inferiore. Questo è il motivo per cui tutti i nuovi elementi che aggiungi verranno mostrati in fondo. Se si desidera che in ordine inverso, può essere prima di impostare a listadapter/vista invertire la lista
Qualcosa di simile:
Collections.reverse(yourList);
Buona idea, ma ho continuato ad aggiungere elementi alla lista e ho continuato a invertirla, essenzialmente aggiungerei, in modo alternato, un oggetto a ciascuna estremità della lista. Dato che ho bisogno di salvare i dati con SharedPreferences che salva solo i tipi di dati di base, sarebbe piuttosto complicato tenere traccia di due elenchi. – rphello101
trovato whati stavo cercando. thankx – raj
Va bene, ma non funziona quando provi con oggetti personalizzati + tag! – delive
Il ListView visualizza i dati come sono memorizzati nell'origine dati.
Quando si aggiunge il database, è necessario aggiungere gli elementi alla fine. Quindi, quando ricevi tutti i dati tramite l'oggetto Cursore e li assegni all'AdrayAdapter, è solo in questo ordine. In pratica dovresti provare a inserire i dati all'inizio del database, piuttosto che alla fine, magari con una data-ora.
Utilizzando ArrayList, lo si può fare da Collections.reverse(arrayList)
o se si utilizza SQLite, è possibile utilizzare order by
.
No, penso che questo sia sbagliato. Per listview è necessario passare array/lista come input. Nel database, a meno che tu non abbia il timestamp di inserimento, non puoi fare nulla. – kosa
@Nambari: mi dispiace. Quello che volevo dire in realtà era quello di recuperare i dati dal database usando un oggetto Cursor e poi inserirli in un ArrayAdapter. Qualcosa come questo http://stackoverflow.com/questions/5717732/how-do-i-display-data-from-my-database-in-a-listview. Aggiornerà la mia risposta Grazie per il tuo commento. – Swayam
Si può sempre avere un'indicazione della data in oggetti e ordinare la listview basato su quello ..
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
}
}
ora ordinare l'elenco
Collections.sort(YourList, new CustomComparator());
Questo dovrebbe ordinare la lista in modo tale che il nuovo articolo andrà in primo piano
È sempre possibile utilizzare una LinkedList e quindi utilizzare il metodo addFirst() per aggiungere elementi all'elenco e avrà il comportamento desiderato (nuovi elementi nella parte superiore di ListView).
Un'altra soluzione senza modificare l'elenco originale, ignorare metodo getItem() nella adattatore
@Override
public Item getItem(int position) {
return super.getItem(getCount() - position - 1);
}
aggiornato: Esempio
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;
}
}
Questa è una soluzione molto elegante. Ho apportato una piccola modifica in modo da poterlo utilizzare in ArrayAdapters anonimi che non espongono gli elementi di dati: 'return super.getItem (getCount() - 1 - position);' –
Funziona ma quando si scorre il primo elemento nell'elenco sembra un duplicato per l'ultimo elenco di oggetti. Penso che questo problema abbia a che fare con il riciclo degli articoli listview (non sono sicuro). –
Potrebbe dirci come sovrascrivere il metodo getItem() nell'adattatore? – Apurva
mBlogList è una vista riciclatore ...
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
È possibile aggiungere elemento all'inizio della lista: come
arraylist.add(0, object)
allora sarà sempre visualizzare il nuovo elemento in alto.
- 1. ListView sfarfallio quando vengono aggiunti nuovi elementi
- 2. % Colonna CPU e carico nella parte superiore
- 3. Visualizzazione sovrapposizione nella parte superiore della visualizzazione elenco?
- 4. Aggiungi barra di avanzamento nella parte inferiore di un listview
- 5. Listview - Piè di pagina nella parte inferiore dello schermo
- 6. Barra di azione divisa Android con elementi di azione nella parte superiore e inferiore?
- 7. convertire paragrafo o nuovi elementi nella casella
- 8. Visualizza la lunghezza della pagina nella parte inferiore della tabella
- 9. iPhone: spazio strano nella parte superiore di UINavigationController
- 10. visualizzazione di visualizzazione nella parte superiore della barra delle azioni
- 11. Come aumentare la spaziatura tab nella parte superiore di Atom?
- 12. UINavigationController presenta una barra di stato aggiuntiva nella parte superiore
- 13. sposta un commit nella parte superiore di tutti i commit
- 14. CSS Posizionamento di un'icona nella parte superiore destra dell'immagine
- 15. Come mostrare l'indicatore di tabulazione nella parte superiore delle schede
- 16. Effetto dissolvenza nella parte superiore e inferiore di NSTableView/NSOutlineView
- 17. come mostrare JOptionPane nella parte superiore di tutte le finestre
- 18. Mantieni pulsanti html nella parte superiore di un div
- 19. 2 righe, prima nella parte superiore e la seconda nella parte inferiore del genitore
- 20. Determina la distanza dalla parte superiore di un div alla parte superiore della finestra con javascript
- 21. Crea scorrimento NavBar nella parte superiore del browser in Bootstrap
- 22. jQuery Etichette flottaggio dati/assi nella parte superiore del grafico
- 23. Finestra del proprietario WPF nella parte superiore della finestra secondaria
- 24. Come disegnare un bordo nella parte superiore del layout lineare
- 25. JavaScript nella parte inferiore/superiore della pagina Web?
- 26. PyQt - visualizzazione del widget nella parte superiore del widget
- 27. Mettere l'asse x nella parte superiore del grafico ggplot2
- 28. Posizione MBProgressHUD nella parte inferiore/superiore dello schermo
- 29. Schede nella parte superiore e inferiore dello schermo
- 30. meno 20 pixel nella parte superiore e inferiore del div
Qual è la fonte dei dati? Se lo stai leggendo da un database, puoi sempre modificare l'ordine di ritorno della query con 'order by' o equivalente. – MrLore