import android.app.ListActivity;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.LinearLayout.LayoutParams;
public class Test extends ListActivity implements OnScrollListener {
    Aleph0 adapter = new Aleph0();
    int lastItem = 0;
    int mProgressStatus = 0;
    private Handler mHandler = new Handler();
    ProgressBar progressBar;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
   LinearLayout searchLayout = new LinearLayout(this);
   searchLayout.setOrientation(LinearLayout.HORIZONTAL);
         progressBar = new ProgressBar(this);
         progressBar.setPadding(0, 0, 15, 0);
         searchLayout.addView(progressBar,new LinearLayout.LayoutParams(
           LinearLayout.LayoutParams.WRAP_CONTENT,
           LinearLayout.LayoutParams.WRAP_CONTENT
         ));
         TextView textView = new TextView(this);
         textView.setText("加载中...");
         textView.setGravity(Gravity.CENTER_VERTICAL);
         searchLayout.addView(textView,new LinearLayout.LayoutParams(
           LinearLayout.LayoutParams.FILL_PARENT,
           LinearLayout.LayoutParams.FILL_PARENT
         ));
         searchLayout.setGravity(Gravity.CENTER);
         LinearLayout loadingLayout = new LinearLayout(this);
         loadingLayout.addView(searchLayout,new LinearLayout.LayoutParams(
           LinearLayout.LayoutParams.WRAP_CONTENT,
           LinearLayout.LayoutParams.WRAP_CONTENT
         ));
         loadingLayout.setGravity(Gravity.CENTER);
        getListView().addFooterView(loadingLayout);
        // Start lengthy operation in a background thread
//        new Thread(new Runnable() {
//            public void run() {
//                while (mProgressStatus < 100) {
//
//                    // Update the progress bar
//                    mHandler.post(new Runnable() {
//                        public void run() {
//                        progressBar.setProgress(mProgressStatus);
//                        }
//                    });
//                }
//            }
//        }).start();
        registerForContextMenu(getListView());
        setListAdapter(adapter);
        getListView().setOnScrollListener(this);
    }
    public void onScroll(AbsListView v, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        lastItem = firstVisibleItem + visibleItemCount - 1 ;
        System.out.println("lastItem:" + lastItem);
    }
    public void onScrollStateChanged(AbsListView v, int state) {
    if(lastItem == adapter.count && state == OnScrollListener.SCROLL_STATE_IDLE){
          adapter.count += 10;
          adapter.notifyDataSetChanged();
    }
//        if(state == OnScrollListener.SCROLL_STATE_IDLE ) {
//                adapter.count += 10;
//                adapter.notifyDataSetChanged();
//        }
    }
    class Aleph0 extends BaseAdapter {
        int count = 10;
        public int getCount() { return count; }
        public Object getItem(int pos) { return pos; }
        public long getItemId(int pos) { return pos; }
        public View getView(int pos, View v, ViewGroup p) {
                TextView view = new TextView(Test.this);
                view.setText("entry " + pos);
                view.setHeight(90);
                return view;
        }
    }
}

OnScrollListener回调分析

如果adapter中的数据量很大的时候,在加载listview时会出现卡顿的现象。这是会让用户抓狂!最好的解决办法就是先加载一定数量的数据,然后在最下方提示正在加载!
动态加载就是把放入adapter中的数据分好几次加载。在用户拖动listview时再加载一定的数据,和sina微博的客户端类似。
给listview添加OnScrollListener监听事件默认会覆盖下面两个方法:
new OnScrollListener() {   
        boolean isLastRow = false;            
        @Override   
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {   
            //滚动时一直回调,直到停止滚动时才停止回调。单击时回调一次。   
            //firstVisibleItem:当前能看见的第一个列表项ID(从0开始)   
            //visibleItemCount:当前能看见的列表项个数(小半个也算)   
            //totalItemCount:列表项共数            
            //判断是否滚到最后一行   
            if (firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount > 0) {   
                isLastRow = true;   
            }   
        }   
        @Override   
        public void onScrollStateChanged(AbsListView view, int scrollState) {   
            //正在滚动时回调,回调2-3次,手指没抛则回调2次。scrollState = 2的这次不回调   
            //回调顺序如下   
            //第1次:scrollState = SCROLL_STATE_TOUCH_SCROLL(1) 正在滚动   
            //第2次:scrollState = SCROLL_STATE_FLING(2) 手指做了抛的动作(手指离开屏幕前,用力滑了一下)   
            //第3次:scrollState = SCROLL_STATE_IDLE(0) 停止滚动                         
             //当屏幕停止滚动时为0;当屏幕滚动且用户使用的触碰或手指还在屏幕上时为1; 
            //由于用户的操作,屏幕产生惯性滑动时为2 
       
            //当滚到最后一行且停止滚动时,执行加载   
            if (isLastRow && scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {   
                //加载元素   
                ......            
                isLastRow = false;   
            }   
        }   
    }

android 滑动分页的更多相关文章

  1. Android --ListView分页

    参考博客:Android ListView分页加载(服务端+android端)Demo 监听OnScrollListener事件 class OnListScrollListener implemen ...

  2. Android ListView分页载入(服务端+android端)Demo

    Android ListView分页载入功能 在实际开发中经经常使用到,是每一个开发人员必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了測试. 服务端使用MyEcli ...

  3. listview下拉刷新 上拉(滑动分页)加载更多

    最 近做的类似于微博的项目中,有个Android功能要使用到listview的向下拉刷新来刷新最新消息,向上拉刷新(滑动分页)来加载更多.新浪微博就是使用这种方式的典型.当用户从网络上读取微博的时候, ...

  4. 十六、Android 滑动效果汇总

    Android 滑动效果入门篇(一)—— ViewFlipper Android 滑动效果入门篇(二)—— Gallery Android 滑动效果基础篇(三)—— Gallery仿图像集浏览 And ...

  5. H5不能少的功能-滑动分页

    // 滑动分页 $(window).scroll(function() {                   var mayLoadContent = $(window).scrollTop() & ...

  6. Android滑动动画ViewFlipper和视频播放VideoView的使用

    Android滑动动画,可以用ViewPager或者ViewFlipper实现. ViewPager自带触摸滑动功能,结合Fragment使用很好,来自补充组件android-support-v4.j ...

  7. Android 滑动效果进阶篇(六)—— 倒影效果

    上篇介绍了使用Animation实现3D动画旋转翻页效果,现在介绍图片倒影实现,先看效果图 本示例主要通过自定义Gallery和ImageAdapter(继承自BaseAdapter)实现 1.倒影绘 ...

  8. android滑动基础篇 - 触屏显示信息

    效果图: 代码部分: activity类代码: package com.TouchView; /* * android滑动基础篇 * */ import android.app.Activity; i ...

  9. Android滑动菜单框架完全解析,教你如何一分钟实现滑动菜单特效

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744400 之前我向大家介绍了史上最简单的滑动菜单的实现方式,相信大家都还记得.如 ...

随机推荐

  1. OpenGL结合C#进行绘图

    转自:http://www.cnblogs.com/wangshide/archive/2012/04/14/2447499.html 本人对OpenGL产生了浓厚的兴趣,又想学习一下C#这个语言,就 ...

  2. freemarker自定义标签(一)

    freemarker自定义标签 1.自定义标签说明 宏变量存储模板片段可以被用作自定义指令macro 2.示例说明 <html> <head> <meta http-eq ...

  3. java字符串替换的问题

    今天工作中遇到一个问题,需要输出mongodbObject中的部分内容,当我转换成字符串以后出现了好像无法替换的问题,经过验证,发现并非是不能替换,只是想法错误而已. package demo; /* ...

  4. 芝麻HTTP:Python爬虫入门之正则表达式

    1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来 ...

  5. 【BZOJ2186】沙拉公主的困惑(数论)

    [BZOJ2186]沙拉公主的困惑(数论) 题面 BZOJ 题解 考虑答案是啥 先假设\(n=m\) 现在求的就是\(\varphi(m!)\) 但是现在\(n!\)是\(m!\)的若干倍 我们知道 ...

  6. Codeforces Round #466 (Div. 2) 题解

    人生中第三次\(CF\)... 考试中切了\(A\)~\(E\) \(F\)题会做没时间写 题解 A:Points on the line 题意 给定一个数列,删最小的数,使最大差不大于一个定值 So ...

  7. UOJ207:共价大爷游长沙

    题面 UOJ Sol 神题 给每个点对随机一个权值,把这两个点的权值异或上这个随机的值 用\(LCT\)维护子树信息,若子树异或和为所有点对的异或和那么就是答案 大常数代码 # include < ...

  8. canvas练手项目(二)——各种操作基础

    想想应该在canvas上面作画了,那么就不得不提到事件了. (打着canvas的旗号,写着mouse事件.挂羊头卖狗肉!哈哈哈哈哈~) 先来看一看HTML事件属性,我们要用的就是Mouse事件,就先研 ...

  9. postgresql搭建从库

    postgresql搭建从库 master  10.40.196.27 slave   10.40.55.69 需求:master和slave作为主从流复制,当master宕机后,slave切换为新主 ...

  10. hadoop第二课

    1.1为什么需要Hadoop  (1)数据分析者面临的问题 – 数据日趋庞大,读写都出现性能瓶颈: – 用户的应用和分析结果,对实时性和响应时间 要求越来越高: – 使用的模型越来越复杂,计算量指数级 ...