#android #listview #load #scrollview #custom-adapter
#Android #listview #загрузить #scrollview #пользовательский адаптер
Вопрос:
Я пробовал это, но при каждом новом запросе он загружает новые данные и заменяет старые данные. нужна помощь Я получаю данные из веб-службы и должен отображаться в представлении списка с помощью пользовательского адаптера. но при загрузке больше это не работает
public abstract class EndlessScrollListener implements OnScrollListener {
private int visibleThreshold = 0;
private int currentPage = 0;
private int previousTotalItemCount = 0;
private boolean loading = true;
private int startingPageIndex = 0;
public EndlessScrollListener() {
}
public EndlessScrollListener(int visibleThreshold) {
this.visibleThreshold = visibleThreshold;
}
public EndlessScrollListener(int visibleThreshold, int startPage) {
this.visibleThreshold = visibleThreshold;
this.startingPageIndex = startPage;
this.currentPage = startPage;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (!loading amp;amp; (totalItemCount < previousTotalItemCount)) {
this.currentPage = this.startingPageIndex;
this.previousTotalItemCount = totalItemCount;
if (totalItemCount == 0) {
this.loading = true;
}
}
if (loading) {
if (totalItemCount > previousTotalItemCount) {
loading = false;
previousTotalItemCount = totalItemCount;
currentPage ;
}
}
if (!loading
amp;amp; (totalItemCount - visibleItemCount) <= (firstVisibleItem visibleThreshold)) {
onLoadMore(currentPage 1, totalItemCount);
loading = true;
}
}
public abstract void onLoadMore(int page, int totalItemsCount);
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
}
Комментарии:
1. Похоже, вы используете что-то вроде adapter.setData(данные) вместо adapter.addData (данные)
Ответ №1:
int lastVisibleItem = firstVisibleItem visibleItemCount;
if(!loading amp;amp; lastVisibleItem == totalItemCount) {
onLoadMore(currentPage 1, PAGE_SIZE);
loading = true;
}
и не забудьте позвонить adapter.notifyDataSetChanged()
после обновления данных в адаптере.