使用onScroll在Android的列表视图 [英] using onScroll in android listview

查看:197
本文介绍了使用onScroll在Android的列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

朋友们我使用列表视图和滚动加载的内容,当它到达结尾。但我面对错误,如相同的URL被称为不止一次如果要是滚动快速度任何人可以帮助我解决这个问题。我已经救援人员到场SCROLL_STATE_IDLE但不知道如何实现我的code相同。此外,即使我不是触摸屏的运行。我现在想知道如何停止工作的code state.Attaching以下

我的code

  INT开始= 0;
INT上限= 3;
loadingMore = FALSE;
listView.setOnScrollListener(新OnScrollListener(){

        @覆盖
        公共无效onScrollStateChanged(AbsListView观点,诠释scrollState){
            // TODO自动生成方法存根
                            }

        }

        @覆盖
        公共无效onScroll(AbsListView观点,诠释firstVisibleItem,
                INT visibleItemCount,诠释totalItemCount){
            // TODO自动生成方法存根
            INT lastInScreen = firstVisibleItem + visibleItemCount;


            如果((lastInScreen == totalItemCount)){

                如果(loadingMore == FALSE){
                开始= lastInScreen  -  1;
                URL =htt​​p://www.dskjhf.com/web-servic/request_response.php?type=get​​_articles&start=
                        +启动+&放大器;末=+限制;
                grabURL(URL);
            }
        }}
    });

    保护无效grabURL(字符串URL){
    // TODO自动生成方法存根
    新BackgroundTask()执行(URL);
    loadingMore = TRUE;
}
 

解决方案

经过这一次它会帮助you..for我它的工作好

  listView.setOnScrollListener(新OnScrollListener(){
            私人诠释currentVisibleItemCount;
            私人诠释currentScrollState;
            私人诠释currentFirstVisibleItem;
            私人诠释totalItem;
            私人的LinearLayout lBelow;


            @覆盖
            公共无效onScrollStateChanged(AbsListView观点,诠释scrollState){
                // TODO自动生成方法存根
                this.currentScrollState = scrollState;
                this.isScrollCompleted();
            }

            @覆盖
            公共无效onScroll(AbsListView观点,诠释firstVisibleItem,
                    INT visibleItemCount,诠释totalItemCount){
                // TODO自动生成方法存根
                this.currentFirstVisibleItem = firstVisibleItem;
                this.currentVisibleItemCount = visibleItemCount;
                this.totalItem = totalItemCount;


            }

            私人无效isScrollCompleted(){
                如果(totalItem  -  currentFirstVisibleItem == currentVisibleItemCount
                        &功放;&安培; this.currentScrollState == SCROLL_STATE_IDLE){
                 / **在这里做code * /

                    页=页+ 1;
                    apiVariables = TCGAPIVariable.getSingletonObject();
                    sea​​rchUrl = apiVariables.searchList(cityId,CATID,面积,
                            关键字,美食,类型,成本,+页,20,UID);
                    Log.d(SEARCH_URL,searchUrl.trim());
                    INT totalRecord =的Integer.parseInt(itemData.get(0)
                            .getTotalRecord());
                    如果(totalRecord> totalItem){
                        如果(TCGStaticMethods
                                .isInternetAvailable(SearchActivity.this))
                            新SearchAsynTask(SearchActivity.this,searchUrl,
                                    真).execute();
                    } 其他 {
                        的LinearLayout llBelow =(的LinearLayout)findViewById(R.id.pbSearchLististingBelow);
                        llBelow.setVisibility(View.GONE);
                    }
                }
            }
        });
 

Friends I am using listview and loading contents on scroll when it reaches at the end. But I am facing error like the same url is called more than once if if scrolled fastly can anybody help me to resolve this. I have gone thro SCROLL_STATE_IDLE but don't know how to implement the same in my code. Also even when am not touching screen its running. I now want to know how to stop the code on Idle state.Attaching my code below

int start = 0;
int limit = 3;
loadingMore = false;
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) {
            // TODO Auto-generated method stub
            int lastInScreen = firstVisibleItem + visibleItemCount;


            if ((lastInScreen == totalItemCount) ) {

                if(loadingMore == false){                   
                start = lastInScreen - 1;                   
                url = "http://www.dskjhf.com/web-servic/request_response.php?type=get_articles&start="
                        + start + "&end=" + limit;
                grabURL(url);                   
            }
        }}
    });

    protected void grabURL(String url) {
    // TODO Auto-generated method stub
    new BackgroundTask().execute(url);
    loadingMore = true;
}

解决方案

Checked this one it will help you..for me it's working well

        listView.setOnScrollListener(new OnScrollListener() {
            private int currentVisibleItemCount;
            private int currentScrollState;
            private int currentFirstVisibleItem;
            private int totalItem;
            private LinearLayout lBelow;


            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                // TODO Auto-generated method stub
                this.currentScrollState = scrollState;
                this.isScrollCompleted();               
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                // TODO Auto-generated method stub
                this.currentFirstVisibleItem = firstVisibleItem;
                this.currentVisibleItemCount = visibleItemCount;
                this.totalItem = totalItemCount;


            }

            private void isScrollCompleted() {
                if (totalItem - currentFirstVisibleItem == currentVisibleItemCount
                        && this.currentScrollState == SCROLL_STATE_IDLE) {
                 /** To do code here*/

                    Page = Page + 1;
                    apiVariables = TCGAPIVariable.getSingletonObject();
                    searchUrl = apiVariables.searchList(cityId, catId, area,
                            keyword, cuisine, type, cost, "" + Page, "20",uId);
                    Log.d("SEARCH_URL", searchUrl.trim());
                    int totalRecord = Integer.parseInt(itemData.get(0)
                            .getTotalRecord());
                    if (totalRecord > totalItem) {
                        if (TCGStaticMethods
                                .isInternetAvailable(SearchActivity.this))
                            new SearchAsynTask(SearchActivity.this, searchUrl,
                                    true).execute();
                    } else {
                        LinearLayout llBelow = (LinearLayout) findViewById(R.id.pbSearchLististingBelow);
                        llBelow.setVisibility(View.GONE);
                    }
                }
            }
        });

这篇关于使用onScroll在Android的列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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