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

StackOverflow https://stackoverflow.com/questions/1549356

Вопрос

Я создаю приложение для чата, в котором каждые 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 в сенсорном режиме фактически не выбирает элемент, а просто прокручивает его.

Это было полезно?

Решение

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

Другие советы

Но это неправильный путь.
Использовать
android:transcriptMode
– Поведение списка при изменении содержимого
– «отключено», не прокручивается
– «нормальный», прокручивается вниз, если виден последний элемент
– «alwaysScroll», всегда прокручивает вниз
android:stackFromBottom
- Складывайте предметы в обратном порядке.
– Начинается с последнего элемента из адаптера
• Полезно для чатов.
– Обмен сообщениями, разговоры, IRC и т. д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top