无尽的滚动列表视图

时间:2013-12-02 08:56:55

标签: android android-listview

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

            });

第一次异步类调用完美 然后滚动一个和两个项目,然后调用异步类和更新的列表视图和在顶部选择的列表视图

3 个答案:

答案 0 :(得分:9)

试试这个,

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();

        }
    });

答案 1 :(得分:1)

我已经实现了EndlessListView lib GitHub上的代码和示例

答案 2 :(得分:0)

Commonware已经为您实现了这一点,使用Commonware的Endless Adapter