Cтатья рассчитана на начальный уровень. Бывалый разработчик не найдет здесь ничего интересного :)
Рассмотрим такую ситуацию. У нас есть приложение, которое представляет данные в виде списка ListView. Т.к. в нек. момент времени на экране отображается лишь определенное количество элементов, возникает вопрос: как подгружать данные в конец списка во время прокрутки(вопрос об источнике данных сейчас не стоит - это может быть сервис или локальная БД)? Казалось бы тривиальная вещь, но у тех кто только осваиват Android платформу он вызывает нек. затруднения. Итак начнем.
Создадим активити и отнаследуем его от ListActivity. Внутри нашего класса определим два компонента. Первый StringAdapter
- класс отвечающий за отрисовку элементов списка.
Обращаю внимание, что в реальном приложении следует использованием ViewHolder, но т.к. проект учебный, то можем позволить себе нек. упрощения. ArrayAdapter
оборачивает String
. data
,как подсказывает нам кэп очевидность, - это коллекция с данными.
Второй компонент - это класс реализующий AsyncTask
. Подгруздка данных будет осуществляться в фоновом режиме. В методе doInBackground
просто генерируем 20-ть строк и добавляем их в коллекцию. В реальном приложении - это то место где должна происходить непосредственная загрузка данных(строка Thread.sleep(1000);
служит для эмуляции задержки сети, чтения из БД и т.д.). По завершению задачи, будет вызван метод onPostExecute
. В нем мы отдаем данные адаптеру и уведомляем его об изменениях.
И последний шаг. В тот момент когда был достигнут конец списка, необходимо запустить задачу подгрузки данных. Для этих целей нужно добавить интерфейс OnScrollListener
в активити класс и реализовать метод onScroll
:
Алгоритм простой. Если последний элемент был отображен и в данный момент времени нет активной задачи, то запускаем подгрузку данных. Теперь небольшое видео, как это работает:
Демо проект можно скачать с github-а.
У меня проблема с внедрением
ReplyDelete