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. oracle 常用知识积累

    一.  基本操作 1.  表操作 1.1 复制建表 create table test as select * from dept; --从已知表复制数据和结构 create table test a ...

  2. 简单bfs(hdu2612)

    #include<stdio.h>#include<string.h>#include<queue>#define INF 0x3f3f3f3fusing name ...

  3. SpringMVC拦截器(包括自定以拦截器--实现HandlerInterceptorAdapter)(资源和权限管理)

    一,springmvc的配置 <!-- 访问拦截 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping ...

  4. 实例 find

    2011/09/08 12:00 时间开始找一天內的,会列出 2011/09/07 12:00 ~ 2011/09/08 12:00 时间內的文件3天前被改动过的文件 (前第三天以前 → 2011/0 ...

  5. Java多线程之Callable接口的实现

    Callable 和 Future接口  Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务. Callable和Runn ...

  6. JVM内存分析

    1.java内存模型分析 java虚拟机运行时数据存储区域包括线程隔离和线程共享两类,整个PC的内存图如下所示: 下面对以上内存区域说明: 1.1 register和cache 当代计算机一般有多个c ...

  7. java——基础语法

    java基础语法 1.关键字:java赋予特殊含义的单词. 2.标识符:程序中开发人员自定义的名词,例如:类名,函数名,变量名(注意事项:①不能以阿拉伯数字开头②不能采用关键字). 3.常量:固定的数 ...

  8. webpack中hash与chunkhash区别和需要注意的问题

    项目发布时,为了解决缓存,需要进行md5签名,这时候就需要用到 hash 和 chunkhash等. 问题一:hash问题 使用 hash 对js和css进行签名时,每一次hash值都不一样,导致无法 ...

  9. .NET中的线程与异步(笔记)

    翻出了之前记录的笔记,基本涵盖了.NET中线程和异步的相关概念.可以提供一个学习的方向. 线程类型 工作者线程IO线程 线程池 全局队列(QueueUserWorkItem.Timer总是放入全局)本 ...

  10. Git基本命令 -- 创建Git项目

    在这里下载git:https://git-scm.com/ 安装的时候, 如果是windows系统的话, 可以勾选unix的命令行工具, 这样在windows命令行下会多出很多命令, 例如ls. Gi ...