Я загружаю список из Http-сервера, 20 за раз, В конце Listview я хочу загрузить следующие 20 данных с сервера, и этот процесс будет продолжаться до тех пор, пока данные не закончится на сервере, Я использовал класс, который расширяет BaseAdapter для заполнения первых 20 данных. Что я должен делать?
Android Динамически загружает Listview в конец прокрутки?
Ответ 1
Это выглядит также как элегантное решение: http://benjii.me/2010/08/endless-scrolling-listview-in-android/
Он также реализует AbsListView.OnScrollListener
и использует AsyncTask для загрузки большего количества контента, как только достигнут определенный порог оставшихся элементов в текущем просмотре прокрутки.
Ответ 2
Хорошо, я видел, что это обычная проблема, поэтому я сделал МАЛЫЙ БИБЛИОТЕКА с дополнительной загрузкой и вытащил, чтобы обновить ListView в github, пожалуйста, проверьте это в здесь, все это объясняется в репозитории.
Ответ 3
Вы можете реализовать AbsListView.OnScrollListener
, который получает информацию и который позволяет загружать больше данных.
См.
....
ListView.setOnScrollListener(this);
....
И затем посмотрите https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/TweetListActivity.java#L287
Или посмотрите пример List9 из примеров sdk.
Ответ 4
Код Heiko Rupp - лучший вариант для этой проблемы.
Единственное, что вам нужно сделать, это реализовать onScrollListener
и в onScroll()
просто проверьте, есть ли конец списка, используя код
boolean loadMore = firstVisibleItem + visibleItemCount >= totalItemCount-1;
если true загружает ваши данные обычным способом.
thaks Heiko Rupp для этого фрагмента:)
Ответ 5
Это то, что я использовал для загрузки большего количества данных в конце списка.
listview.setOnScrollListener(new OnScrollListener(){
@Override
public void onScroll(AbsListView view,
int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
//Algorithm to check if the last item is visible or not
final int lastItem = firstVisibleItem + visibleItemCount;
if(lastItem == totalItemCount){
// you have reached end of list, load more data
}
}
@Override
public void onScrollStateChanged(AbsListView view,int scrollState) {
//blank, not using this
}
});
Ответ 6
У меня была эта проблема, когда я случайно пытался обновить представление из не-пользовательского потока. Перемещение кода обновления пользовательского интерфейса в поток пользовательского интерфейса решило мою проблему!
Handler mainHandler = new Handler(Looper.getMainLooper());
mainHandler.post(new Runnable() {
@Override
public void run() {
// insert ui update code here
}
}
});