Question

Je construis une application de salle de chat où de nouveaux événements sont en cours d'analyse pour toutes les X secondes. Chaque fois que cela arrive, ce code met à jour le RoomAdapter (une sous-classe personnalisée de ArrayAdapter) avec les nouvelles données et il fait défiler vers le bas:

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

Ceci est bien, sauf que si l'utilisateur fait défiler jusqu'à jeter un regard sur l'histoire de la salle, il va lui sauter vers le bas lorsque le scrutin se produit. Ce que je voudrais faire est d'avoir pour que si l'utilisateur est déjà au bas de la liste, il y reste après un sondage pour les nouveaux événements. Si de l'utilisateur intentionnellement vers le haut défilée, je voudrais que l'utilisateur ne pas être dérangé.

Comment puis-je détecter quand je suis déjà au fond défile d'un ListView?

Note:. Je ne peux pas faire getListView () getSelectedItemPosition (), parce que les docs noter , appelant setSelection en mode tactile ne sélectionne pas réellement l'élément, tout défile à lui.

Était-ce utile?

La solution

Je ne l'ai pas essayé, mais que diriez-vous getLastVisiblePosition()==getCount()-1? (Méthodes sur ListView)

Autres conseils

Mais ce n'est pas une bonne façon.
Utilisez
android:transcriptMode
- Comportement de la liste lorsque le contenu change
- « désactivé », ne défile pas
- « normal », fait défiler vers le bas si le dernier élément est visible
- « alwaysScroll », défile toujours au fond
android:stackFromBottom
- les éléments de la pile dans l'ordre inverse
- Commence par le dernier élément de l'adaptateur
• Utile pour les chats
- Messagerie, Talk, IRC, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top