zoukankan      html  css  js  c++  java
  • android 的ListView中,如何判断其内容已滚动到最顶部或者最底部?

    根据这个方法检测:

     1 getListView().setOnScrollListener(new OnScrollListener() {
     2             @Override
     3             public void onScrollStateChanged(AbsListView view, int scrollState) {
     4             }
     5 
     6             @Override
     7             public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
     8                 if(firstVisibleItem==0){
     9                     Log.e("log", "滑到顶部");
    10                 }
    11                 if(visibleItemCount+firstVisibleItem==totalItemCount){
    12                     Log.e("log", "滑到底部");
    13                 }
    14             }
    15         });

     from:http://ask.csdn.net/questions/459

    这是另外一种 在底部

    listView.setOnScrollListener(new OnScrollListener() { 
        
        @Override 
        public void onScrollStateChanged(AbsListView view, int scrollState) { 
         // 当不滚动时 
         if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { 
          //判断是否滚动到底部 
          if (view.getLastVisiblePosition() == view.getCount() - 1) { 
           adapter.count += 10;  
                       adapter.notifyDataSetChanged(); 
                       int currentPage=adapter.count/10; 
                       Toast.makeText(getApplicationContext(), "第"+currentPage+"页", Toast.LENGTH_LONG).show(); 
          } 
         } 
        } 
        
        @Override 
        public void onScroll(AbsListView view, int firstVisibleItem, 
          int visibleItemCount, int totalItemCount) { 
         // TODO Auto-generated method stub 
         
        } 
       });

    ListView实现滑动到底部加载更多

    平时刷网页的时候当我们滑动到网页底部,网页会自动加载更多数据方便我们的浏览,比较典型的例子就是Twitter。

    在安卓上也可以看见这样的设计,尤其被使用在ListView中。当ListView滑动到底部的时候会显示进度条并且加载更多数据。

    实现这个功能的方法很简单,只需要调用ListViewsetOnScrollListener()方法即可。

    调用setOnScrollListener()方法需要重写两个方法,一个是onScrollStateChanged()方法,用来判断ListView当前的滑动状态;一个是onScroll()方法,用来检测ListView当前的视图状态。在这里我们只需要使用onScroll()方法即可。详细的过程见下方的代码和注释。

    listView.setOnScrollListener(new AbsListView.OnScrollListener() {
        /*
         * 定义一个布尔变量,
         * 用于判断滑动方向是否向下
         */
        private boolean moveToBottom = false;
    
        /*
         * 定义一个整型变量,
         * 用于记录ListView之前可见的第一个列表项的索引值,
         * 主要用于判断ListView的滑动方向是否向下,
         * 具体的使用方法见下方
         */
        private int previous = 0;
    
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            /* 什么也不需要做 */
        }
    
        /*
         * view指报告当前状态的视图;
         * firstVisibleItem表示ListView当前可见的第一个列表项的索引值;
         * visibleItemCount表示ListView当前可见的列表项的个数;
         * totalItemCount表示ListView总共的列表项个数
         *
         * 当ListView滑动到底部的时候,
         * totalItemCount == firstVisibleItem + visibleItemCount;
         * 但是满足上述条件时ListView却不一定是向下滑动的,
         * 所以我们需要加入一个判断向下滑动的条件,
         * 只需要循环对比ListView之前可见的第一个列表项的索引值previous和当前可见的第一个列表项的索引值firstVisibleItem,
         * 当previous < firstVisibleItem时列表向下滑动,
         * 当previous > firstVisibleItem时列表向上滑动,
         * 记住对比结束之后要将firstVisibleItem赋值给previous,
         * 方便下次比较
         */
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            if (previous < firstVisibleItem) {
                moveToBottom = true;
            } else if (previous > firstVisibleItem) {
                moveToBottom = false;
            }
            previous = firstVisibleItem;
    
            if (totalItemCount == firstVisibleItem + visibleItemCount && moveToBottom) {
                /* 需要加载更多数据的代码 */
            }
        }
    });

    底部自动加载适用于分页加载大量数据,但是当数据量较小时这个功能反而成了累赘,比如说全部的数据量可能也就一个屏幕大小,只要稍微向下滑动一下就会开始加载,但是这样的加载却是不必要的。解决这个问题的方法也很简单,只需要修改一下加载更多的判断条件,当totalItemCount小于某个值的时候就不加载数据了;类似地你也可以指定数据量,当达到totalItemCount达到某个数据量的时候就不加载数据了。

    from:http://mthli.github.io/post/ListView%E5%AE%9E%E7%8E%B0%E6%BB%91%E5%8A%A8%E5%88%B0%E5%BA%95%E9%83%A8%E5%8A%A0%E8%BD%BD%E6%9B%B4%E5%A4%9A.html

    SCROLL_STATE_FLING,这个参数表示你手离开后ListView还在“飞”中,理解?
    SCROLL_STATE_IDLE,这个参数表示ListView停下不动了
    SCROLL_STATE_TOUCH_SCROLL,这个参数表示你手还在ListView上

                //第1次:scrollState = SCROLL_STATE_TOUCH_SCROLL(1) 正在滚动    
                //第2次:scrollState = SCROLL_STATE_FLING(2) 手指做了抛的动作(手指离开屏幕前,用力滑了一下)    
                //第3次:scrollState = SCROLL_STATE_IDLE(0) 停止滚动  

  • 相关阅读:
    开启nginx缓存
    xsl输出html代码 非闭合
    记一次网络波动导致druid连接池无法创建新连接的BUG
    mysql时间操作
    JVM知识点精华汇总
    java 基础 ---HashMap、HashTable
    java面试--小谈如何面试
    Spring框架
    JAVA+微信支付APP开发+支付宝支付APP开发
    消息队列
  • 原文地址:https://www.cnblogs.com/yc3120/p/4382280.html
Copyright © 2011-2022 走看看