Как загрузить больше данных в представление списка Android с помощью пользовательского адаптера внизу при прокрутке

#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() после обновления данных в адаптере.