/**
 * 模拟请求数据
 */
public class DataServer {private static List<String> data=new ArrayList<String>();
    public static List<String> getData(int offset, int maxnumber) {for(int i=0;i<maxnumber;i++){data.add("Listview分页加载数据"+"item"+i);
        }return data;
    }

}

public class MainActivity extends Activity {private ListView listView=null;

    //listview的数据填充器
    private ArrayAdapter<String> adapter;
    //listview中数据的集合
    private List<String> data;
    //下一页初始化为0
    int nextpage = 0;
    //每一页记载多少数据
    private int number=10;
    //最多有几页
    private int maxpage=5;
    //用来判断是否加载完成
    private boolean loadfinish=true;
    private View v;
    private Handler handler;
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //listview中脚跟的视图
        v=this.getLayoutInflater().inflate(R.layout.progress, null);
        listView=(ListView) super.findViewById(R.id.listview);
        //得到数据
        data=DataServer.getData(0,10);
        //实习化ArrayAdapter对象
        adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, data);
        //添加listview的脚跟视图,这个方法必须在listview.setAdapter()方法之前,否则无法显示视图
        listView.addFooterView(v);
        //添加数据
        listView.setAdapter(adapter);
        //当下一页的数据加载完成之后移除改视图
        listView.removeFooterView(v);
        //当用户滑动listview到最后一项是,动态的加载第二页的数据
        listView.setOnScrollListener(new OnScrollListener(){public void onScrollStateChanged(AbsListView view, int scrollState){// TODO Auto-generated method stub
            }@Override
            public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, final int totalItemCount){//得到listview最后一项的id
                int lastItemId=listView.getLastVisiblePosition();
                //判断用户是否滑动到最后一项,因为索引值从零开始所以要加上1
                if((lastItemId+1)==totalItemCount){/**
                     * 计算当前页,因为每一页只加载十条数据,所以总共加载的数据除以每一页的数据的个数
                     * 如果余数为零则当前页为currentPage=totalItemCount/number                     * 如果不能整除则当前页为(int)(totalItemCount/number)+1;
                     * 下一页则是当前页加1
                     */
                    int currentPage=totalItemCount%number;
                    if(currentPage==0){currentPage=totalItemCount/number;
                    }else
                    {currentPage=(int)(totalItemCount/number)+1;
                    }System.out.println("当前页为:"+currentPage);
                    nextpage=currentPage+1;
                    //当总共的数据大于0是才加载数据
                    if(totalItemCount>0){//判断当前页是否超过最大页,以及上一页的数据是否加载完成
                        if(nextpage<=maxpage && loadfinish ){//添加页脚视图
                            listView.addFooterView(v);

                            loadfinish=false;
                            new Thread(new Runnable(){public void run(){try {Thread.sleep(2000);
                                    } catch (InterruptedException e) {// TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }//获取当前加载页的数据
                                    data=DataServer.getData(totalItemCount, 10);
                                    //通知listview改变UI中的数据
                                    handler.sendEmptyMessage(0);
                                }}).start();
                            //还可以通过这样的方式实现
                            //AsyncTaskLoadData asynctask=new AsyncTaskLoadData(totalItemCount);
                            ///asynctask.execute();
                        }}}//判断加载的数据的页数有没有超过最大页,并且是否已经记载完成

            }});

        handler=new Handler(){@SuppressLint("HandlerLeak")public void handleMessage(Message msg){if(msg.what==0){//通知listview中的数据已经改动
                    adapter.notifyDataSetChanged();
                    loadfinish=true;
                }super.handleMessage(msg);
                //判断listview中的页脚视图是否存在,如果存在在删除页脚视图
                if(listView.getFooterViewsCount()!=0){listView.removeFooterView(v);
                }}};

    }//异步加载数据
    @SuppressWarnings("unused")private final class AsyncTaskLoadData extends AsyncTask<Object, Object, Object>{private int count;
        private List<String> list;
        public AsyncTaskLoadData(int totalItemCount) {this.count=totalItemCount;
            list=new ArrayList<String>();
        }protected Object doInBackground(Object... params) {list=DataServer.getData(count, 10);
            return null;
        }@Override
        protected void onPostExecute(Object result){try {data=list;

                adapter.notifyDataSetChanged();
                Thread.sleep(2000);
                loadfinish=true;
                if(listView.getFooterViewsCount()!=0){listView.removeFooterView(v);
                }} catch (InterruptedException e) {// TODO Auto-generated catch block
                e.printStackTrace();
            }super.onPostExecute(result);
        }}}

listview 分页加载相关推荐

  1. 基于Android官方AsyncListUtil优化经典ListView分页加载机制(二)

    基于Android官方AsyncListUtil优化经典ListView分页加载机制(二) 我写的附录文章1,介绍了如何使用Android官方的分页加载框架AsyncListUtil优化改进常见的Re ...

  2. 分组显示的ListView分页加载数据

    参考:  http://www.cnblogs.com/qianxudetianxia/archive/2011/06/07/2074326.html 分组的ListView的拖拽  http://w ...

  3. Android中ListView分页加载数据

    熟悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们今天就要讲一讲列表组件ListView加载数据的相关内容 ...

  4. listview分页加载

    熟悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们今天就要讲一讲列表组件ListView加载数据的相关内容 ...

  5. Android Room联合AsyncListUtil实现RecyclerView分页加载ORM数据

    Android Room联合AsyncListUtil实现RecyclerView分页加载ORM数据 我之前写了一系列关于AsyncListUtil实现RecyclerView和ListView的分页 ...

  6. listView分批和分页加载数据

    在Android应用程序中,有时候会向listView中加载很多数据,向listView中加载数据是一个耗时的过程,加载过多的数据用户停留在listView上,一直等待,给用户的体验特别不好,比如向服 ...

  7. List 分页加载数据控制机制

    分页加载是一种应用很广泛的数据展示控制机制,相信绝大多数开发者对于这一套机制都非常熟悉.这篇文章的主要目的结合实际的使用场景,对以往在开发中遇到一些概念进行梳理,归纳的同时加深理解,也希望能帮助更多刚 ...

  8. php下拉上滑分页,Flutter实现下拉刷新 上拉分页加载更多

    一.Flutter实现下拉刷新和上拉分页加载更多 在Flutter官方sdk中给我们提供了下拉刷新的组件RefreshIndicator.但是没有提供上拉分页加载更多的组件.但是在Flutter Li ...

  9. 分页加载PullToRefreshLayout+PullableListView

    PullToRefreshLayout+PullableListView实现分页加载功能 1.修改布局文件(添加下拉刷新和上拉加载的布局) <com.abcaaaaa.zyypay.ui.wid ...

  10. ZMY_自定义分页加载

    //自定义分页加载 package com.example.pagedemo; import java.util.ArrayList; import android.app.Activity; imp ...

最新文章

  1. 2022-2028年中国环烷基润滑油行业市场研究及前瞻分析报告
  2. 腾讯「AI In All」的背后,是开放AI技术能力,探索腾讯应用场景
  3. npoi的mvc怎么ajax导出,asp.net mvc利用NPOI导入导出Excel解决方法
  4. Python 计算程序运行时间
  5. OpenCV使用FacemarkAAM
  6. PHP-代码审计-文件上传
  7. 14nm芯片技术突破 中国集电关键装备实现从无到有
  8. bem什么意思_BEM命名法
  9. org.json.JSONException: Value of type java.lang.String cannot be converted to JSONArra
  10. 如何在C语言中巧用正则表达式
  11. 用户 'sa' 登录失败。 连接SQL2000出现的问题。
  12. 黑群晖 DSM 6.2 3617 成功安装教程
  13. 食品行业十大进销存软件功能大对比,我教你怎么选
  14. 【线性代数】A为方阵,当存在B使得 AB=E ,证明BA=E
  15. 工业云平台大数据统计分析有什么优势?
  16. hdu4416——后缀自动机
  17. golang 连接mysql 的时间参数loc, parseTime
  18. Navicat下载,安装,PJ和简单使用的详细图文教程
  19. 节点操作之创建和添加节点
  20. 如何使用正则表达式匹配一个空格

热门文章

  1. rpc调用和http调用有什么区别
  2. MAML小样本学习算法解读及基于飞桨的代码实现
  3. TwinCAT3 控制器PLC之间EAP通讯2-从机发送方式1
  4. 如何通过搜索计算机共享打印机驱动程序,怎么解决连接共享打印机时“找不到驱动程序”...
  5. 巨量引擎api对接 php,巨量引擎Marketing API 现已开放多种创意能力接口
  6. 朋友:趣头条上市了!我:谁?
  7. 优秀信息系统项目经理应该具备的技能和素质
  8. 基于R语言的聚类分析
  9. 原来系统还能这么装!教你虚拟光驱Daemon重装win10
  10. 【计算机组成原理】寄存器的本质——锁存器