Определение положения прокрутки внутри ListView (или ScrollView)

Я создаю приложение для чата, где новые события опрашиваются каждые X секунд. Каждый раз, когда это происходит, этот код обновляет RoomAdapter (пользовательский подкласс ArrayAdapter) новыми данными и прокручивает их вниз:

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

Это хорошо, за исключением того, что, если пользователь прокручивает взгляд вверх по истории комнаты, он собирается спрыгнуть ее вниз, когда произойдет опрос. Я хотел бы сделать так, чтобы, если пользователь уже находился внизу списка, он оставался там после опроса новых событий. Если пользователь намеренно прокрутил вверх, я бы хотел, чтобы его не беспокоили.

Как мне определить, когда я уже прокрутился до конца ListView?

Примечание: я не могу сделать getListView(). GetSelectedItemPosition(), потому что, как отмечают документы, вызов setSelection в сенсорном режиме фактически не выбирает элемент, а просто прокручивает его.

2 ответа

Решение

Я не пробовал это, но как насчет getLastVisiblePosition()==getCount()-1? (методы на ListView)

Но это не правильный путь.
использование
android:transcriptMode
- Поведение списка при изменении содержимого
- "отключен", не прокручивается
- "нормальный", прокрутка вниз, если последний элемент виден
- "AlwaysScroll", всегда прокручивается вниз
android:stackFromBottom
- складывать предметы в обратном порядке
- начинается с последнего элемента из адаптера
• Полезно для чатов
- обмен сообщениями, разговоры, IRC и т. Д.

Другие вопросы по тегам