Определение положения прокрутки внутри 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 и т. Д.