Обнаружение положения прокрутки внутри ListView (или ScrollView) - PullRequest
2 голосов
/ 11 октября 2009

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

6 голосов
/ 11 октября 2009

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

5 голосов
/ 06 сентября 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...