先看效果:

ListView的footer布局:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:paddingBottom="10dp"
  6. android:paddingTop="10dp" >
  7.  
  8. <TextView
  9. android:id="@+id/pulldown_footer_text"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:layout_centerInParent="true"
  13. android:text="加载更多日志"
  14. android:textSize="15dp" />
  15.  
  16. <ProgressBar
  17. android:id="@+id/pulldown_footer_loading"
  18. style="@android:style/Widget.ProgressBar.Small.Inverse"
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:layout_centerVertical="true"
  22. android:layout_marginLeft="20dp"/>
  23.  
  24. </RelativeLayout>

ListView的item和main_activity布局很简单,分别是一个TextView和ListView,不再贴出。

MainActivity代码贴出:

  1. import java.util.ArrayList;
  2. import java.util.List;
  3.  
  4. import android.app.Activity;
  5. import android.os.Bundle;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.widget.AbsListView.OnScrollListener;
  10. import android.widget.AbsListView;
  11. import android.widget.BaseAdapter;
  12. import android.widget.ListView;
  13. import android.widget.RelativeLayout;
  14. import android.widget.TextView;
  15. import android.widget.Toast;
  16.  
  17. public class MainActivity extends Activity
  18. {
  19. private ListView listview;
  20. private LayoutInflater inflater;
  21. private List<String> arrays = new ArrayList<String>();
  22. private RelativeLayout footer;
  23. private MyAdapter adapter;
  24. // 每页显示条数
  25. private Integer perpage = 20;
  26. // 当前页数
  27. private Integer currentpage = 1;
  28. // 最大页数
  29. private Integer maxpage = 1;
  30.  
  31. @Override
  32. public void onCreate(Bundle savedInstanceState)
  33. {
  34. super.onCreate(savedInstanceState);
  35. setContentView(R.layout.activity_main);
  36.  
  37. setMaxPage(40);
  38. loadData(currentpage, perpage);
  39.  
  40. inflater = getLayoutInflater();
  41. listview = (ListView) this.findViewById(R.id.pulldownview);
  42. footer = (RelativeLayout) View.inflate(getApplicationContext(), R.layout.pulldown_footer, null);
  43. listview.addFooterView(footer, null, true);
  44. adapter = new MyAdapter();
  45. listview.setAdapter(adapter);
  46. listview.setOnScrollListener(new OnScrollListener()
  47. {
  48.  
  49. @Override
  50. public void onScrollStateChanged(AbsListView view, int scrollState)
  51. {
  52. if (view.getLastVisiblePosition() == view.getCount() - 1)
  53. {
  54. if (currentpage != maxpage)
  55. {
  56. currentpage++;
  57. loadData(currentpage, perpage);
  58. adapter.notifyDataSetChanged();
  59. } else
  60. {
  61. Toast.makeText(getApplicationContext(), "没有更多的数据!", Toast.LENGTH_SHORT).show();
  62. listview.removeFooterView(footer);
  63. }
  64. }
  65. }
  66.  
  67. @Override
  68. public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
  69. {
  70.  
  71. }
  72. });
  73. }
  74.  
  75. /**
  76. * 模拟分页查询数据
  77. *
  78. * @param currentpage当前页数
  79. * @param perpage
  80. * 每页显示数
  81. */
  82. private void loadData(Integer currentpage, Integer perpage)
  83. {
  84. // 起始数据
  85. Integer firstResult = (currentpage - 1) * perpage;
  86. // 获取的最大数据
  87. Integer maxResult = currentpage * perpage;
  88. System.out.println("firstResult:"+firstResult+" "+"maxResult:"+maxResult);
  89. // select * from database where XXXX order by XX limit firstResult,maxResult //order by可省略,但有order by时limit必需在它后面
  90. for (; firstResult < maxResult; firstResult++)
  91. {
  92. arrays.add("这是测试数据" + (firstResult+1));
  93. }
  94. }
  95.  
  96. /**
  97. * 模拟获取最大页数
  98. *
  99. * @param total
  100. * 总的数据
  101. */
  102. private void setMaxPage(Integer total)
  103. {
  104. if (total % perpage == 0)
  105. {
  106. maxpage = total / perpage;
  107. } else
  108. {
  109. maxpage = total / perpage + 1;
  110. }
  111. System.out.println("maxpage:"+maxpage);
  112. }
  113.  
  114. private class MyAdapter extends BaseAdapter
  115. {
  116.  
  117. @Override
  118. public int getCount()
  119. {
  120. return arrays == null ? 0 : arrays.size();
  121. }
  122.  
  123. @Override
  124. public Object getItem(int position)
  125. {
  126. return null;
  127. }
  128.  
  129. @Override
  130. public long getItemId(int position)
  131. {
  132. return 0;
  133. }
  134.  
  135. @Override
  136. public View getView(int position, View convertView, ViewGroup parent)
  137. {
  138. ViewHolder holder;
  139. if (convertView == null)
  140. {
  141. holder = new ViewHolder();
  142. convertView = inflater.inflate(R.layout.item_list, null);
  143. holder.textView = (TextView) convertView.findViewById(R.id.text);
  144. convertView.setTag(holder);
  145. } else
  146. {
  147. holder = (ViewHolder) convertView.getTag();
  148. }
  149. holder.textView.setText(arrays.get(position));
  150. return convertView;
  151. }
  152. }
  153.  
  154. private static class ViewHolder
  155. {
  156. TextView textView;
  157. }
  158. }

  

Android ListView加载更多的更多相关文章

  1. ListView 加载更多列表 Load More mono forandroid 项目笔记

    今天项目经理找我说Listview加载更多的时候会出现一些问题,主要表现在会顿一下.让我我就去找Java的方法看看.自己写出了mono 的加载更多功能.和大家分享一下 先看效果 首先是模型类ListI ...

  2. Listview 加载更多

    JQM Listview 加载更多 demo - Warren的个人主页 JQM Listview 加载更多 Demo 测试数据1 测试数据2 测试数据3 测试数据4 显示更多 Page Footer ...

  3. android ListView加载不同布局

    今天来跟大家讨论下同一个ListView如何加载不同的布局. 老规矩,先来看效果图. 主要步骤如下 1.增加Type. 2.重写getViewTypeCount方法. 3.重写getItemViewT ...

  4. android listview 加载图片错乱(错位)

       写道 今天晚上一个朋友介绍我看了一篇文章,也是解决android中listview在加载图片错位的问题,看了之后,感觉写的很好,自己也遇到这个问题,但是又不知道从何下手,看到这篇文章后,我的问题 ...

  5. 【转】Android ListView加载不同的item布局

    原创教程,转载请保留出处:http://www.eoeandroid.com/thread-72369-1-1.html     最近有需求需要在listView中载入不同的listItem布局,开始 ...

  6. android listview 加载遇到的问题

    http://blog.csdn.net/l_serein/article/details/7706338 转载: 描述一下场景: 菜单栏上有若干分类,点击每一个分类,ListView下分根据分类显示 ...

  7. Listview加载更多是,恢复到原来的位置,如果不加特殊处理,总是跳转第一条

    1.记录listView滚动到的位置的坐标,然后利用listView.scrollTo精确的进行恢复 listView.setOnScrollListener(new OnScrollListener ...

  8. ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多

    ListView实现Item上下拖动交换位置  并且实现下拉刷新  上拉加载更多 package com.example.ListViewDragItem; import android.app.Ac ...

  9. ListView下拉刷新上拉加载更多实现

    这篇文章将带大家了解listview下拉刷新和上拉加载更多的实现过程,先看效果(注:图片中listview中的阴影可以加上属性android:fadingEdge="none"去掉 ...

随机推荐

  1. SublimeText2 快捷键一览表

    SublimeText2 快捷键一览表 Sublime Text比起Notepad++,UltraEdit之类Code编辑器来说,其功能有过之而无不及,配合着各种插件使用,Sublime Text在实 ...

  2. ROWID伪列

    ROWID伪列概念: 在数据表中每一行所保存的记录,oracle会为每条记录分配一个唯一的地址编号,这个编号就是通过ROWID表示的. 所有的数据都利用ROWID进行定位. 观察rowid的存在 SQ ...

  3. sublime 3 安装go环境

    安装go环境是在go已经安装的情况下, 1 首先安装 Package Control ctrl + · 打开sublime 命令行模式 复制粘贴以下代码 import urllib.request,o ...

  4. php: 不能嵌套try-catch-fnally,否则执行时间过长

    php不能try-catch-fnally里面在嵌套try-catch-fnall,否则本来执行时间不长的程序,会被执行更长时间,这是php的bug吗? 如: try{ 代码块 }catch (\Ex ...

  5. [官方软件] Easy Sysprep v4.3.29.602 【系统封装部署利器】(2016.01.22)--skyfree大神

    [官方软件] Easy Sysprep v4.3.29.602 [系统封装部署利器](2016.01.22) Skyfree 发表于 2016-1-22 13:55:55 https://www.it ...

  6. jquery获得option的值和对option进行操作

    Query获取Select元素,并选择的Text和Value: $("#select_id").change(function(){//code...}); //为Select添加 ...

  7. AX2012 multiple enum values as query filter选择多个枚举值当过滤条件

    classDeclaration { QueryBuildRange qbrLocationType; } datasource.init() { super(); qbrLocationType = ...

  8. LabVIEW之生产者/消费者模式--队列操作 彭会锋

    LabVIEW之生产者/消费者模式--队列操作 彭会锋 本文章主要是对学习LabVIEW之生产者/消费者模式的学习笔记,其中涉及到同步控制技术-队列.事件.状态机.生产者-消费者模式,这几种技术在在本 ...

  9. 前端优化之图片延迟加载(lazyload.js)

    要想缩短首屏加载时间,思路一般是减少http请求次数和降低每次的请求量.本文中使用现成的lazyload.js插件,文末会放出下载地址. lazyload.js可以实现图片分批次加载,不是一次性加载完 ...

  10. C# 反射浅析

    反射是一个运行库类型发现的过程.通过反射可以得到一个给定程序集所包含的所有类型的列表,这个列表包括给定类型中定义的方法.字段.属性和事件.此外,通过反射也可以动态的发现一组给定类支持的接口.方法的参数 ...