listview 分页加载
/** * 模拟请求数据 */ 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 分页加载相关推荐
- 基于Android官方AsyncListUtil优化经典ListView分页加载机制(二)
基于Android官方AsyncListUtil优化经典ListView分页加载机制(二) 我写的附录文章1,介绍了如何使用Android官方的分页加载框架AsyncListUtil优化改进常见的Re ...
- 分组显示的ListView分页加载数据
参考: http://www.cnblogs.com/qianxudetianxia/archive/2011/06/07/2074326.html 分组的ListView的拖拽 http://w ...
- Android中ListView分页加载数据
熟悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们今天就要讲一讲列表组件ListView加载数据的相关内容 ...
- listview分页加载
熟悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们今天就要讲一讲列表组件ListView加载数据的相关内容 ...
- Android Room联合AsyncListUtil实现RecyclerView分页加载ORM数据
Android Room联合AsyncListUtil实现RecyclerView分页加载ORM数据 我之前写了一系列关于AsyncListUtil实现RecyclerView和ListView的分页 ...
- listView分批和分页加载数据
在Android应用程序中,有时候会向listView中加载很多数据,向listView中加载数据是一个耗时的过程,加载过多的数据用户停留在listView上,一直等待,给用户的体验特别不好,比如向服 ...
- List 分页加载数据控制机制
分页加载是一种应用很广泛的数据展示控制机制,相信绝大多数开发者对于这一套机制都非常熟悉.这篇文章的主要目的结合实际的使用场景,对以往在开发中遇到一些概念进行梳理,归纳的同时加深理解,也希望能帮助更多刚 ...
- php下拉上滑分页,Flutter实现下拉刷新 上拉分页加载更多
一.Flutter实现下拉刷新和上拉分页加载更多 在Flutter官方sdk中给我们提供了下拉刷新的组件RefreshIndicator.但是没有提供上拉分页加载更多的组件.但是在Flutter Li ...
- 分页加载PullToRefreshLayout+PullableListView
PullToRefreshLayout+PullableListView实现分页加载功能 1.修改布局文件(添加下拉刷新和上拉加载的布局) <com.abcaaaaa.zyypay.ui.wid ...
- ZMY_自定义分页加载
//自定义分页加载 package com.example.pagedemo; import java.util.ArrayList; import android.app.Activity; imp ...
最新文章
- 2022-2028年中国环烷基润滑油行业市场研究及前瞻分析报告
- 腾讯「AI In All」的背后,是开放AI技术能力,探索腾讯应用场景
- npoi的mvc怎么ajax导出,asp.net mvc利用NPOI导入导出Excel解决方法
- Python 计算程序运行时间
- OpenCV使用FacemarkAAM
- PHP-代码审计-文件上传
- 14nm芯片技术突破 中国集电关键装备实现从无到有
- bem什么意思_BEM命名法
- org.json.JSONException: Value of type java.lang.String cannot be converted to JSONArra
- 如何在C语言中巧用正则表达式
- 用户 'sa' 登录失败。 连接SQL2000出现的问题。
- 黑群晖 DSM 6.2 3617 成功安装教程
- 食品行业十大进销存软件功能大对比,我教你怎么选
- 【线性代数】A为方阵,当存在B使得 AB=E ,证明BA=E
- 工业云平台大数据统计分析有什么优势?
- hdu4416——后缀自动机
- golang 连接mysql 的时间参数loc, parseTime
- Navicat下载,安装,PJ和简单使用的详细图文教程
- 节点操作之创建和添加节点
- 如何使用正则表达式匹配一个空格
热门文章
- rpc调用和http调用有什么区别
- MAML小样本学习算法解读及基于飞桨的代码实现
- TwinCAT3 控制器PLC之间EAP通讯2-从机发送方式1
- 如何通过搜索计算机共享打印机驱动程序,怎么解决连接共享打印机时“找不到驱动程序”...
- 巨量引擎api对接 php,巨量引擎Marketing API 现已开放多种创意能力接口
- 朋友:趣头条上市了!我:谁?
- 优秀信息系统项目经理应该具备的技能和素质
- 基于R语言的聚类分析
- 原来系统还能这么装!教你虚拟光驱Daemon重装win10
- 【计算机组成原理】寄存器的本质——锁存器