Domanda

Sto costruendo un'applicazione chat room dove i nuovi eventi vengono intervistati per ogni X secondi. Ogni volta che accade, questo codice aggiorna il RoomAdapter (una sottoclasse personalizzata di ArrayAdapter) con i nuovi dati e scorre fino in fondo:

RoomAdapter adapter = (RoomAdapter) getListAdapter();
for (int i=0; i<newEvents.size(); i++)
 adapter.add(newEvents.get(i));
getListView().setSelection(events.size()-1);

Questo è bene, tranne che se l'utente scorre fino a sguardo alla storia della stanza, sta andando a saltare la sua fino in fondo quando il sondaggio accade. Quello che mi piacerebbe fare è di avere in modo che se l'utente è già in fondo alla lista, rimane lì dopo un sondaggio per nuovi eventi. Se l'utente intenzionalmente fatto scorrere verso l'alto, mi piacerebbe che l'utente non essere disturbato.

Come faccio a rilevare quando sto già arrotolato al fondo di un ListView?

. Nota: non posso fare getListView () getSelectedItemPosition (), in quanto come la documentazione nota , chiamando setSelection quando è in modalità touch in realtà non selezionare la voce, semplicemente scorre ad esso.

È stato utile?

Soluzione

Non ho provato questo, ma come su getLastVisiblePosition()==getCount()-1? (Metodi su ListView)

Altri suggerimenti

Ma questo non è un modo corretto.
utilizzare
android:transcriptMode
- il comportamento della lista quando il contenuto cambia
- “disabile”, non scorre
- “normale”, scorre fino in fondo se ultimo elemento è visibile
- “alwaysScroll”, scorre sempre alla
fondo • android:stackFromBottom
- gli elementi dello stack in ordine inverso
- Inizia con l'ultimo elemento dall'adattatore
• Utile per le chat
- Messaging, Talk, IRC, ecc

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top