先看效果:

ListView的footer布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:paddingTop="10dp" > <TextView
android:id="@+id/pulldown_footer_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="加载更多日志"
android:textSize="15dp" /> <ProgressBar
android:id="@+id/pulldown_footer_loading"
style="@android:style/Widget.ProgressBar.Small.Inverse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"/> </RelativeLayout>

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

MainActivity代码贴出:

import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity
{
private ListView listview;
private LayoutInflater inflater;
private List<String> arrays = new ArrayList<String>();
private RelativeLayout footer;
private MyAdapter adapter;
// 每页显示条数
private Integer perpage = 20;
// 当前页数
private Integer currentpage = 1;
// 最大页数
private Integer maxpage = 1; @Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setMaxPage(40);
loadData(currentpage, perpage); inflater = getLayoutInflater();
listview = (ListView) this.findViewById(R.id.pulldownview);
footer = (RelativeLayout) View.inflate(getApplicationContext(), R.layout.pulldown_footer, null);
listview.addFooterView(footer, null, true);
adapter = new MyAdapter();
listview.setAdapter(adapter);
listview.setOnScrollListener(new OnScrollListener()
{ @Override
public void onScrollStateChanged(AbsListView view, int scrollState)
{
if (view.getLastVisiblePosition() == view.getCount() - 1)
{
if (currentpage != maxpage)
{
currentpage++;
loadData(currentpage, perpage);
adapter.notifyDataSetChanged();
} else
{
Toast.makeText(getApplicationContext(), "没有更多的数据!", Toast.LENGTH_SHORT).show();
listview.removeFooterView(footer);
}
}
} @Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{ }
});
} /**
* 模拟分页查询数据
*
* @param currentpage当前页数
* @param perpage
* 每页显示数
*/
private void loadData(Integer currentpage, Integer perpage)
{
// 起始数据
Integer firstResult = (currentpage - 1) * perpage;
// 获取的最大数据
Integer maxResult = currentpage * perpage;
System.out.println("firstResult:"+firstResult+" "+"maxResult:"+maxResult);
// select * from database where XXXX order by XX limit firstResult,maxResult //order by可省略,但有order by时limit必需在它后面
for (; firstResult < maxResult; firstResult++)
{
arrays.add("这是测试数据" + (firstResult+1));
}
} /**
* 模拟获取最大页数
*
* @param total
* 总的数据
*/
private void setMaxPage(Integer total)
{
if (total % perpage == 0)
{
maxpage = total / perpage;
} else
{
maxpage = total / perpage + 1;
}
System.out.println("maxpage:"+maxpage);
} private class MyAdapter extends BaseAdapter
{ @Override
public int getCount()
{
return arrays == null ? 0 : arrays.size();
} @Override
public Object getItem(int position)
{
return null;
} @Override
public long getItemId(int position)
{
return 0;
} @Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
if (convertView == null)
{
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.item_list, null);
holder.textView = (TextView) convertView.findViewById(R.id.text);
convertView.setTag(holder);
} else
{
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(arrays.get(position));
return convertView;
}
} private static class ViewHolder
{
TextView textView;
}
}

  

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. Openfire用户密码加密解密

    需求要求审核过程中都用匿名进行用户注册登录,注册用户审核通过后才使用openfire内置表 如何做到用户密码统一 Openfire是通过org.jivesoftware.util.Blowfish.j ...

  2. JAVA 1.4 算术运算

    1. 如果在一个算术运算中有int,double,float那么最终运算的结果是double,那么也就是说参与运算的类型和得到的结果:结果一定是参与运算的精度最高的那个类型 2. 算术运算中的除法 i ...

  3. 图片的DataURL技术

    DataURL基本原理 在网页中我们通常用下面的方式来引用一张图片,这样当我们请求网页的时候,浏览器也会想服务器发起一个请求,去请求这张图片. <img src='images/test.jpg ...

  4. Spring jar包详解

    Spring jar包详解 org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现 org.springframework.asm——spri ...

  5. JQuery_处理元素和浏览器的窗口的尺寸

    一.jQuery width() 和 height() 方法 width() 方法设置或返回元素的宽度(不包括内边距.边框或外边距). height() 方法设置或返回元素的高度(不包括内边距.边框或 ...

  6. String or binary data would be truncated 解决办法

    原因: 一般出现这个问题是因为数据库中的某个字段的长度小,而插入数据大 解决: 找到相应字段,修改表结构,使表字段大小相同或大于要插入的数据

  7. a.redhat系统如何卸载默认jdk

    Redhat系统安装之后,会默认有openjdk在安装(下图已经是卸载掉了) 这个openjdk下面的需要进行卸载,你可以通过命令进行卸载,例如首先查看JDK,然后默认直接通过rpm命令进行卸载L 卸 ...

  8. 关于UIView的AutoresizingMask属性的研究

    在 UIView 中有一个autoresizingMask的属性,它对应的是一个枚举的值(如下),属性的意思就是自动调整子控件与父控件中间的位置,宽高. 1 2 3 4 5 6 7 8 9 enum  ...

  9. 浅谈android binder机制

    binder机制 是谷歌优化在android上更适合终端的IPC(多进程通信方式),满足系统对通信方式,传输性能和安全性的要求. 特性: 1. 用驱动程序来推进进程间的通信.2. 通过共享内存来提高性 ...

  10. 关于启用 HTTPS 的一些经验分享(一)

    转载: 关于启用 HTTPS 的一些经验分享(一) 随着国内网络环境的持续恶化,各种篡改和劫持层出不穷,越来越多的网站选择了全站 HTTPS.就在今天,免费提供证书服务的 Let's Encrypt ...