Pregunta

Estoy construyendo una aplicación de sala de chat donde los nuevos eventos se sondean para cada X segundos. Cada vez que ocurre, este código se actualiza la RoomAdapter (una subclase personalizada de ArrayAdapter) con los nuevos datos y se desplaza a la parte inferior:

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

Esto está bien, excepto que si el usuario se desplaza hasta un vistazo a la historia de la habitación, que va a saltar a bajar hasta el fondo cuando el sondeo sucede. Lo que me gustaría hacer es tener de manera que si el usuario ya se encuentra en la parte inferior de la lista, se queda allí después de una encuesta para nuevos eventos. Si el usuario desplaza intencionadamente hacia arriba, me gustaría que el usuario no ser molestado.

¿Cómo puedo detectar cuando ya estoy desplazado hasta la parte inferior de un ListView?

Nota:. No puedo hacer getListView () getSelectedItemPosition (), porque como los documentos señalan , llamando setSelection cuando está en modo táctil en realidad no seleccione el elemento, simplemente se desplaza a la misma.

¿Fue útil?

Solución

No he probado esto, pero ¿qué hay de getLastVisiblePosition()==getCount()-1? (Métodos en ListView)

Otros consejos

Pero eso no es una manera apropiada.
utilice
android:transcriptMode
- Comportamiento de la lista cuando el contenido cambia
- “desactivado”, no se desplaza
- “normal”, se desplaza a la parte inferior si último elemento es visible
- “alwaysScroll”, siempre se desplaza a la parte inferior
android:stackFromBottom
- elementos de pila en orden inverso
- Se inicia con el último elemento del adaptador
• Útil para chats
- Mensajería, Talk, IRC, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top