Как обновить ListView при прокрутке при получении данных с сервера в Android? - PullRequest
8 голосов
/ 19 января 2012

В настоящее время я использую AsyncTask для обработки соединения Http и извлечения данных в формате JSON.
Загрузка всех данных тривиальна, но занимает слишком много времени, поэтому я решил переключиться на загрузку 10 элементов одновременно, используя LIMIT OFFSET (mysql).
Далее я настроил событие onScroll для своего списка, чтобы каждый раз создавать новую AsyncTask прокрутку пользователя.Однако из того, что я прочитал, AsyncTask хранится в пуле потоков, который ограничен 5 потоками одновременно, поэтому я не уверен, что это правильный подход.Я новичок в клиент-серверном приложении, поэтому могу ли я дать мне совет по этому вопросу?Любая связанная статья, документация будет принята с благодарностью.

Ответы [ 3 ]

12 голосов
/ 19 января 2012

Вот несколько полезных ссылок для него:

Android: реализация индикатора выполнения и «загрузка ...» для бесконечного списка, такого как Android Market

EndlessПросмотр списка с текущей асинхронной задачей

Бесконечный список Android

http://www.androidguys.com/2009/10/21/tutorial-autogrowing-listview/

http://mylifewithandroid.blogspot.com/2010/03/progressively-loading-listviews.html

Простыми шагами,

При прокрутке пользователя - определить конец списка
1) Показать уведомление о ходе выполнения
2) Запросить обновление
3) Получить обновление (асинхронно) и расширить список

2 голосов
/ 19 января 2012

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

Когда вы это делаете, вы должны сохранить текущую позицию и уведомить адаптер, что список изменился.

2 голосов
/ 19 января 2012

Если вы используете ListView, я могу смело предположить, что вы, должно быть, используете какой-то ListAdapter. Вместо того, чтобы начинать новый AsyncTask в событии onScroll, вы должны оставить только один AsyncTask для извлечения данных с сервера, добавить эти данные в набор данных ListAdapter и затем вызвать notifyDatasetChanged для ListAdapter.

Остальные ListAdapter и ListView позаботятся.

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