ListView 分页简单写法

前言

关于Android 端ListView分页的做法之前一直不懂,碰巧项目中遇到了,所以在这边记录下学习的成果。

  • 分页:当用户在ListView界面上的时候不会加载全部的数据,而是从服务端加载一部分数据,当用户滑动ListView到末端的时候再从服务器加载更多数据。

  • 接口介绍:OnScrollListener

// 静态属性
public static int SCROLL_STATE_IDLE = 0; // 空闲状态
public static int SCROLL_STATE_TOUCH_SCROLL = 1; // 滚动状态,并且手指在屏幕上
public static int SCROLL_STATE_FLING = 2;    //    滚动状态,手指已经离开了屏幕

// 抽象方法
public void onScrollStateChanged(AbsListView view, int scrollState); 
// ListView在状态改变的时候调用,用户在正常滑动的时候通常会执行三次(刻意滑动当listView停止的时候才将手离开屏幕执行两次)

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount); 
// ListView在滚动的时候会反复调用该方法,调用次数和listView的子项无关(屏幕只要滑动一点就会调用)
  • 设置成员属性:分页页码,默认1; 判断是否滑到底部的标记
 private int mPageNum = 1;
 private boolean isBottom;
  • 设置LIstView滑动监听器
mNewsListView.setOnScrollListener(new OnScrollListener() {

     @Override
     public void onScrollStateChanged(AbsListView view, int scrollState) {
         if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
             if (isBottom) {
                 // 下载更多数据
                 Toast.makeText(MainActivity.this, "正在加载",
                         Toast.LENGTH_SHORT).show();        
                 //加载数据的方法代码.......
                 //这里面的代码通常是根据mPageNum加载不同的数据
                 // 对mPageNum处理: mPageNum++

             }
         }
     }

     @Override
     public void onScroll(AbsListView view, int firstVisibleItem,
             int visibleItemCount, int totalItemCount) {
         if (firstVisibleItem + visibleItemCount == totalItemCount) {
             // 说明:
             // fistVisibleItem:表示划出屏幕的ListView子项个数
             // visibleItemCount:表示屏幕中正在显示的ListView子项个数
             // totalItemCount:表示ListView子项的总数    
             // 前两个相加==最后一个说明ListView滑到底部
             isButtom = true;
         }else{
             isButtom = false;
         }
     }
 });
  • 当ListView到达底部的时候,服务器没有更多数据可以加载。
    继续用手指滑动屏幕,因为没有更多数据,所以屏幕ListView不会动,这个时候onScrollStateChanged方法会执行,但是onScroll方法不会执行

你可能感兴趣的:(android)