Android的ListView的setOnScrollListener [英] Android ListView setOnScrollListener

查看:209
本文介绍了Android的ListView的setOnScrollListener的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有我的setOnScrollListener问题。它只是不断打电话给我的AsyncTask每当我滚动到列表视图的底部。我如何设置setOnScrollListener只加载一次,我到达底部。

  listview.setAdapter(适配器);
            mProgressDialog.dismiss();

            listview.setOnScrollListener(新OnScrollListener(){

                @覆盖
                公共无效onScrollStateChanged(AbsListView来看,
                        INT scrollState){// TODO自动生成方法存根

                }

                @覆盖
                公共无效onScroll(AbsListView观点,诠释firstVisibleItem,
                        INT visibleItemCount,诠释totalItemCount){
                    INT lastInScreen = firstVisibleItem + visibleItemCount;
                    如果(lastInScreen == totalItemCount){

                        新loadmore()执行()。

                    } 其他 {

                    }

                }
            });
 

当你向下滚动列表视图

解决方案

OnScroll方法被调用,所以你最好的选择是使用某种填充物,等实现的一个<一个HREF =htt​​p://benjii.me/2010/08/endless-scrolling-listview-in-android/>这里。

 公共类EndlessScrollListener实现OnScrollListener

    私人诠释visibleThreshold = 5;
    私人诠释当前页= 0;
    私人诠释previousTotal = 0;
    私人布尔负荷=真;

    公共EndlessScrollListener(){
    }
    公共EndlessScrollListener(INT visibleThreshold){
        this.visibleThreshold = visibleThreshold;
    }

    @覆盖
    公共无效onScroll(AbsListView观点,诠释firstVisibleItem,
            INT visibleItemCount,诠释totalItemCount){
        如果(装载){
            如果(totalItemCount&GT; previousTotal){
                装载= FALSE;
                previousTotal = totalItemCount;
                当前是++;
            }
        }
        如果(装载和放大器;&安培;!(totalItemCount  -  visibleItemCount)&LT; =(firstVisibleItem + visibleThreshold)){
            //我加载使用一个后台任务演出的下一个页面,
            //但你可以在这里调用任何功能。
            新LoadGigsTask()执行(当前页+ 1);
            加载=真正的;
        }
    }

    @覆盖
    公共无效onScrollStateChanged(AbsListView观点,诠释scrollState){
    }
}
 

visibleThreshold - 项目的最低金额低于你的当前滚动位置,装载更多的前

当前页 - 数据已加载的当前页面

previousTotal - 数据集中项目的最后一个加载后的总数

加载 - 真,如果我们仍然在等待最后一组数据加载

I'm having problem with my setOnScrollListener. It just keeps calling my asynctask whenever I scroll to the bottom of the listview. How do I set the setOnScrollListener to load only once I reach the bottom.

listview.setAdapter(adapter);
            mProgressDialog.dismiss();

            listview.setOnScrollListener(new OnScrollListener() {

                @Override
                public void onScrollStateChanged(AbsListView view,
                        int scrollState) { // TODO Auto-generated method stub

                }

                @Override
                public void onScroll(AbsListView view, int firstVisibleItem,
                        int visibleItemCount, int totalItemCount) {
                    int lastInScreen = firstVisibleItem + visibleItemCount;
                    if (lastInScreen == totalItemCount) {

                        new loadmore().execute();

                    } else {

                    }

                }
            });

解决方案

OnScroll method is called whenever you scroll down the list view, so the best bet for you to is to use some kind of padding, like the one implemented here.

public class EndlessScrollListener implements OnScrollListener 

    private int visibleThreshold = 5;
    private int currentPage = 0;
    private int previousTotal = 0;
    private boolean loading = true;

    public EndlessScrollListener() {
    }
    public EndlessScrollListener(int visibleThreshold) {
        this.visibleThreshold = visibleThreshold;
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        if (loading) {
            if (totalItemCount > previousTotal) {
                loading = false;
                previousTotal = totalItemCount;
                currentPage++;
            }
        }
        if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
            // I load the next page of gigs using a background task,
            // but you can call any function here.
            new LoadGigsTask().execute(currentPage + 1);
            loading = true;
        }
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
    }
}

visibleThreshold – The minimum amount of items to have below your current scroll position, before loading more.

currentPage – The current page of data you have loaded

previousTotal – The total number of items in the dataset after the last load

loading – True if we are still waiting for the last set of data to load.

这篇关于Android的ListView的setOnScrollListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆