先看效果:

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. laravel安装学习步骤

    在看知乎比较php框架的优劣的时候提到为什么laravel这么好国内用的少,还有就是yii2,有人提到原因就是composer在国内无法使用.这制约了使用composer进行包管理的框架在国内的传播和 ...

  2. PNG的使用技巧

    Png是图像文件存储格式,在网页设计中已经不是一个陌生的名词,在前端开发中经常使用到它,如常用CSS 雪碧图.而Png的使用不仅仅如此,Png有多少种格式,有哪些特点,PC端中常用的Png格式是哪些, ...

  3. Makefile相关知识

    1. Makefile的编写: 1>. makefile的命名 1. makefile 2. Makefile 2>. makefile中的规则 三部分: 目标(app):依赖(main. ...

  4. windows使用python3.4生成二维码

    1.首先下载qrcode库 使用pip命令: pip install qrcode python3.x以上的版本默认是安装好pip的,如果出现无法找到pip指令的信息的话,则需要首先安装pip. 2. ...

  5. plsql dev

    访问v$session,v$sesstat and v$statname视图的权限 grant create session,resource to chf; grantselectonv_$sess ...

  6. C/C++回调函数

    C/C++回调函数 在理解“回调函数”之前,首先讨论下函数指针的概念. 函数指针 (1)概念:指针是一个变量,是用来指向内存地址的.一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了 ...

  7. 学习ios【2】Objective-C 数字和字符串

    一 数字 1.使用Foundation.h可以直接导入所有的头文件. 在XCode中,想查看某个方法帮助,可以将光标放在方法上,按住option键同时单击即可. 官方文档:https://develo ...

  8. JS学习笔记--仿手机发送内容交互

    学习JS笔记----记录上课中学习的知识点,分享下老师教的内容: 1.html内容 <div id="box"> <div id="message&qu ...

  9. 隔壁信概大作业xjb写——同化棋ATAXX

    话说泥萌北大信科啊,助教是有多懒...去年黑白棋今年同化棋,顺带打ai都不用自己写标程... 好吧..我知道泥萌重点在各种sb的辅助操作上..什么悲剧的可以随时暂停载入...有毒吧 [据说泥萌上课没讲 ...

  10. 文顶顶iOS开发博客链接整理及部分项目源代码下载

    文顶顶iOS开发博客链接整理及部分项目源代码下载   网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...