endless scroll list view

前端 未结 3 599
借酒劲吻你
借酒劲吻你 2020-12-17 06:35
listView.setOnScrollListener(new OnScrollListener() {

                public void onScrollStateChanged(AbsListView view, int scrollState) {


                }

            


        
相关标签:
3条回答
  • 2020-12-17 06:57

    I have implemented a EndlessListView lib.
    Code and example at GitHub

    0 讨论(0)
  • 2020-12-17 07:04

    Commonware has already implemented that for you, use Commonware's Endless Adapter

    0 讨论(0)
  • 2020-12-17 07:11

    Try this,

    public abstract class EndlessScrollListener implements OnScrollListener {
    // The minimum amount of items to have below your current scroll position
    // before loading more.
    private int visibleThreshold = 1;
    // The current offset index of data you have loaded
    private int currentPage = 0;
    // The total number of items in the dataset after the last load
    private int previousTotalItemCount = 0;
    // True if we are still waiting for the last set of data to load.
    private boolean loading = true;
    // Sets the starting page index
    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;
    }
    
    // This happens many times a second during a scroll, so be wary of the code
    // you place here.
    // We are given a few useful parameters to help us work out if we need to
    // load some more data,
    // but first we check if we are waiting for the previous load to finish.
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        // If the total item count is zero and the previous isn't, assume the
        // list is invalidated and should be reset back to initial state
        // If there are no items in the list, assume that initial items are
        // loading
        if (!loading && (totalItemCount < previousTotalItemCount)) {
            this.currentPage = this.startingPageIndex;
            this.previousTotalItemCount = totalItemCount;
            if (totalItemCount == 0) {
                this.loading = true;
            }
        }
    
        // If it’s still loading, we check to see if the dataset count has
        // changed, if so we conclude it has finished loading and update the
        // current page
        // number and total item count.
        if (loading) {
            if (totalItemCount > previousTotalItemCount) {
                loading = false;
                previousTotalItemCount = totalItemCount;
                currentPage++;
            }
        }
    
        // If it isn’t currently loading, we check to see if we have breached
        // the visibleThreshold and need to reload more data.
        // If we do need to reload some more data, we execute onLoadMore to
        // fetch the data.
        if (!loading
                && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
            onLoadMore(currentPage + 1, totalItemCount);
            loading = true;
        }
    }
    
    // Defines the process for actually loading more data based on page
    public abstract void onLoadMore(int page, int totalItemsCount);
    
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        // Don't take any action on changed
    }
    }
    

    Use the above class. and just implement your listView to EndlessScrollListener like this

    list.setOnScrollListener(new EndlessScrollListener() {
    
            @Override
            public void onLoadMore(int page, int totalItemsCount) {
                // TODO Auto-generated method stub
                new Loadmore().execute();
    
            }
        });
    
    0 讨论(0)
提交回复
热议问题