【问题标题】:endless scroll list view无限滚动列表视图
【发布时间】:2013-12-02 08:56:55
【问题描述】:
listView.setOnScrollListener(new OnScrollListener() {

                public void onScrollStateChanged(AbsListView view, int scrollState) {


                }

                public void onScroll(AbsListView view, int firstVisibleItem,
                        int visibleItemCount, int totalItemCount) {

                    if(loading){
                        //if trying to loading
                        if(totalItemCount > previousTotal){

                        loading = false;
                        previousTotal = totalItemCount;
                        }
                        }
                    if(!loading && ((totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold))){

                        limit=limit+10;
                                    AlertSearchAsync task1=new AlertSearchAsync();
                            String url="http://www.jobdiagnosis.com/fjobsrchservise.php?keyword="+
                                    str_descAlert+
                                    "&location="+str_locAlert+
                                    "&limit="+limit;
                            url=url.replace(" ", "%20");
                            //Toast.makeText(getApplicationContext(),"Limit"+limit, Toast.LENGTH_LONG).show();
                            task1.execute(url);
                   }

            });

第一次异步类调用完美 之后,当滚动一项和两项时,调用 asyn 类并更新列表视图和顶部选择的列表视图

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    试试这个,

    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
    }
    }
    

    使用上面的类。并像这样将您的 listView 实现为 EndlessScrollListener

    list.setOnScrollListener(new EndlessScrollListener() {
    
            @Override
            public void onLoadMore(int page, int totalItemsCount) {
                // TODO Auto-generated method stub
                new Loadmore().execute();
    
            }
        });
    

    【讨论】:

    【解决方案2】:

    我已经实现了一个EndlessListView 库。
    GitHub 上的代码和示例

    【讨论】:

      【解决方案3】:

      Commonware 已经为你实现了,使用 Commonware 的Endless Adapter

      【讨论】:

        猜你喜欢
        • 2014-12-12
        • 2015-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-01
        • 1970-01-01
        相关资源
        最近更新 更多