Listview分页加载数据的实现

  1. public class MainActivity extends Activity {
  2. protected static final int SUCCESS_GET_DATA = 0;
  3. private ListView listview;
  4. private DataService service;
  5. private List<String> data;// 加载的总数据
  6. private ArrayAdapter<String> adapter;
  7.  
  8. private boolean finish = true;// 是否加载完成
  9.  
  10. private View footer;
  11.  
  12. private Handler mHandler = new Handler() {
  13. public void handleMessage(android.os.Message msg) {
  14. switch (msg.what) {
  15. case SUCCESS_GET_DATA:
  16. @SuppressWarnings("unchecked")
  17. ArrayList<String> result = ((ArrayList<String>) msg.obj);
  18. data.addAll(result);
  19. // 让listview自动刷新
  20. adapter.notifyDataSetChanged();
  21. finish = true;
  22. // 将页脚删除掉
  23. if (listview.getFooterViewsCount() > 0) {
  24. listview.removeFooterView(footer);
  25. }
  26. break;
  27.  
  28. default:
  29. break;
  30. }
  31. };
  32. };
  33.  
  34. @Override
  35. public void onCreate(Bundle savedInstanceState) {
  36. super.onCreate(savedInstanceState);
  37. setContentView(R.layout.main);
  38.  
  39. listview = (ListView) findViewById(R.id.listview);
  40. service = new DataService();
  41. data = new ArrayList<String>();
  42. List<String> result = service.getData(0, 20);
  43. data.addAll(result);
  44. adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.tv_info,
  45. data);
  46. footer = View.inflate(this, R.layout.footer, null);
  47. // 在增加listview的页脚之前,需要提前设置一次
  48. listview.addFooterView(footer);
  49. listview.setAdapter(adapter);
  50. // 然后再次将页脚删除掉
  51. listview.removeFooterView(footer);
  52. // 滚动监听事件
  53. listview.setOnScrollListener(new MyOnScrollListener());
  54. }
  55.  
  56. private final class MyOnScrollListener implements OnScrollListener {
  57. // 加载的总页数
  58. private int countPage = 5;
  59. // 每页加载20条数据
  60. private int pageSize = 20;
  61.  
  62. // 滚动状态发生改变时
  63. public void onScrollStateChanged(AbsListView view, int scrollState) {
  64. Log.i("i", " scrollState " + scrollState);
  65. }
  66.  
  67. // 当list开始滚动时
  68. public void onScroll(AbsListView view, int firstVisibleItem,
  69. int visibleItemCount, int totalItemCount) {
  70. // 最下面的条目数
  71. final int totalCount = firstVisibleItem + visibleItemCount;
  72. int currentPage = totalCount / pageSize;// 当前页
  73. int nextPage = currentPage + 1;// 下一页
  74. // 当翻到最后一条数据时
  75. if (totalCount == totalItemCount && nextPage <= countPage && finish) {
  76. // 已经移动到了listview的最后
  77. finish = false;
  78. // 添加页脚
  79. listview.addFooterView(footer);
  80. new Thread() {
  81. public void run() {
  82. SystemClock.sleep(3000);
  83. List<String> result = service.getData(totalCount + 1,
  84. pageSize);
  85. Message msg = new Message();
  86. msg.what = SUCCESS_GET_DATA;
  87. msg.obj = result;
  88. mHandler.sendMessage(msg);
  89. };
  90. }.start();
  91. }
  92. }
  93. }
  94. }

数据服务类,这里进行数据的模拟获取

  1. public class DataService {
  2.  
  3. //加载数据
  4. public List<String> getData(int startPosition ,int offset){
  5. List<String> data = new ArrayList<String>();
  6. for(int i = 0;i< 20;i++){
  7. data.add("分页加载的数据 " + i);
  8. }
  9. return data;
  10. }
  11. }


【Android进阶】Listview分页加载数据的实现的更多相关文章

  1. Android中ListView分页加载数据

    public class MainActivity extends Activity { private ListView listView=null; //listview的数据填充器 privat ...

  2. java攻城狮之路(Android篇)--widget_webview_metadata_popupwindow_tabhost_分页加载数据_菜单

    一.widget:桌面小控件1 写一个类extends AppWidgetProvider 2 在清单文件件中注册: <receiver android:name=".ExampleA ...

  3. listView 分页加载数据

    Android应用 开发中,采用ListView组件来展示数据是很常用的功能,当一个应用要展现很多的数据时,一般情况下都不会把所有的数据一次就展示出来,而是通过分页 的形式来展示数据,个人觉得这样会有 ...

  4. Android中ListView动态加载数据

    1. 引言: 为了提高ListView的效率和应用程序的性能,在Android应用程序中不应该一次性加载ListView所要显示的全部信息,而是采取分批加载策略,随着用户的滑动,动态的从后台加载所需的 ...

  5. Android 自定义ListView动态加载数据

    我们都知道网络取数据是耗时操作,如果我们一次性请求所有数据,假如数据量不多那还可以接受,但是如果数据量特别多,那么带来的后果就是用户的愤怒(用户是很没有耐心的),所以这时候我们就需要动态的加载数据,分 ...

  6. android ListView 分页加载数据

    1.mainActivity <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  7. Android中ListView异步加载数据

    1.主Activity public class MainActivity extends Activity { private ListView listView; private ArrayLis ...

  8. Android之ListView&Json加载网络数据

    使用到的主要内容: 1.Json 解析网络数据 2.异步任务加载图片和数据 3.ListView 的内存空间优化(ConvertView)和运行时间优化(ViewHolder) 4.ListView ...

  9. Android的ListView异步加载图片时,错位、重复、闪烁问题的分析及解决方法

    Android ListView异步加载图片错位.重复.闪烁分析以及解决方案,具体问题分析以及解决方案请看下文. 我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图 ...

随机推荐

  1. 使用Django创建简易Blog

    网上看了个例子,但是自己却运行不同,最后终于知道了原因,记录下来.原来没有给settings.py里的INSTALLED_APPS添加blog.就像这样: 这是一个手把手的实例教程,本来学习笔记一样, ...

  2. 《火球——UML大战需求分析》(第1章 大话UML)——1.3 行为型的UML(Behavior Diagram)

    说明: <火球——UML大战需求分析>是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张.欢迎你按文章的序号顺序阅读,谢 ...

  3. Java中的statickeyword具体解释

    1.statickeyword主要有2个作用: ①为某特定的数据类型或者对象分配单一的存储空间.而与创建对象的个数无关. ②在不创建对象的情况下能够直接通过类名来直接调用方法或者使用类的属性. 2.s ...

  4. [Oracle] - 性能优化工具(4) - AWRDD

    AWRDD是用于比較两个AWR快照,从而获得不同一时候期的性能. 运行例如以下语句获得AWRDD: @?/rdbms/admin/awrddrpt.sql 2025 23 2月 2014 07:12 ...

  5. 向日葵sunlogin配置

    客户端配置: xxxx@TIM sunlogin_linux_1.0.0.25020]$ lsbin  html  install_sunlogin.sh  readme.txt  script  u ...

  6. css3进行截取

    在css3出现之前,一般采用substring来进行截取,现在 不用js,纯css3也能进行截取了: text-overflow:clip | ellipsis 1.clip: 要在一定的高度内,配合 ...

  7. ubuntu server编译安装nginx

    刚刚安装好了ubuntu server14.04,如今要安装一个webserver,纯静态就用nginx应用程序server吧,性能出众啊. 安装编译环境 我们这里採用源代码编译安装的方式,大家能够看 ...

  8. git笔记之解决eclipse不能提交jar等文件的问题

    今天用git托管了一个java web项目,由于是web项目,所以要上传jar文件(此项目未使用maven管理),一直使用git commit and push,就是在server上看不到jar文件上 ...

  9. 金色的 SQL注意事项(1)

    page(1-75) 最好是没有意义的主键字段,以方便未来的扩展. PS:主键,以后标书编码填错须要改的时候,关联表都须要跟着改.假设是一个无意义的自增字段是主键就无此原因. 主键最好不要设置为联合主 ...

  10. Visual Studio Tips: How to change project namespace

    /* Author: Jiangong SUN */ If you want to modify a project's namespace and its physical container na ...