Android数据分批加载-滑动到底部自动加载列表

Android数据分批加载-滑动到底部自动加载列表

2014年5月9日

本博文介绍如何进行数据分批加载,在应用开发当中会经常使用到ListView,点击更多加载数据是我们经常简单,为了提供用户体验,当用户将列表滚动到底部自动加载数据,这样的形式用得比较多。

下面给大家提供的例子是,每次模拟20条数据,滑动到底部时再请求20条数据直到请求到限定页数为止

具体代码实现:

/08_Datapageload/src/com/wwj/datapageload/MainActivity.java

package com.wwj.datapageload;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {
	private ListView listView;
	private List<String> data = new ArrayList<String>();
	ArrayAdapter<String> adapter;
	View footer;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		footer = getLayoutInflater().inflate(R.layout.footer, null);

		listView = (ListView) findViewById(R.id.listView);
		listView.setOnScrollListener(new ScrollListener());

		// 模拟数据
		data.addAll(DataService.getData(0, 20));
		adapter = new ArrayAdapter<String>(this, R.layout.listview_item,
				R.id.textView, data);
		listView.addFooterView(footer);// 添加页脚(放在ListView最后)
		listView.setAdapter(adapter);
		listView.removeFooterView(footer);
	}

	private int number = 20; // 每次获取多少条数据
	private int maxpage = 5; // 总共有多少页
	private boolean loadfinish = true; // 指示数据是否加载完成

	private final class ScrollListener implements OnScrollListener {

		@Override
		public void onScroll(AbsListView view, int firstVisibleItem,
				int visibleItemCount, int totalItemCount) {
			Log.i("MainActivity", "onScroll(firstVisibleItem="
					+ firstVisibleItem + ",visibleItemCount="
					+ visibleItemCount + ",totalItemCount=" + totalItemCount
					+ ")");

			final int loadtotal = totalItemCount;
			int lastItemid = listView.getLastVisiblePosition(); // 获取当前屏幕最后Item的ID
			if ((lastItemid + 1) == totalItemCount) { // 达到数据的最后一条记录
				if (totalItemCount > 0) {
					// 当前页
					int currentpage = totalItemCount % number == 0 ? totalItemCount
							/ number
							: totalItemCount / number + 1;
					int nextpage = currentpage + 1; // 下一页
					if (nextpage <= maxpage && loadfinish) {
						loadfinish = false;
						listView.addFooterView(footer);

						// 开一个线程加载数据
						new Thread(new Runnable() {

							@Override
							public void run() {
								try {
									Thread.sleep(3000);
								} catch (InterruptedException e) {
									e.printStackTrace();
								}
								List<String> result = DataService.getData(
										loadtotal, number);
								// 发送消息
								handler.sendMessage(handler.obtainMessage(100,
										data));
							}
						}).start();
					}
				}
			}

		}

		@Override
		public void onScrollStateChanged(AbsListView view, int scrollState) {
			Log.i("MainActivity", "onScrollStateChanged(scrollState="
					+ scrollState + ")");
		}

	}

	private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			data.addAll((List<String>) msg.obj);
			// 告诉ListView数据已经发生改变,要求ListView更新界面显示
			adapter.notifyDataSetChanged();
			if (listView.getFooterViewsCount() > 0) { // 如果有底部视图
				listView.removeFooterView(footer);
			}
			loadfinish = true; // 加载完成
		};
	};

}

/08_Datapageload/src/com/wwj/datapageload/DataService.java

package com.wwj.datapageload;

import java.util.ArrayList;
import java.util.List;

public class DataService {
	public static List<String> getData(int offset, int maxResult) { // 分页limit
																	// 0,20
		List<String> data = new ArrayList<String>();
		for (int i = 0; i < 20; i++) {
			data.add("ListView数据的分批加载" + i);
		}
		return data;

	}
}

效果图如下:

Android数据分批加载-滑动到底部自动加载列表

时间: 2024-10-19 11:59:26

Android数据分批加载-滑动到底部自动加载列表的相关文章

Android LRecyclerView 操作案例分享-实现下拉刷新、滑动到底部自动加载

一直想抽空写下这个开源项目,但是各种原因没有抽时间,今天还是趁着工作间隙写下了这篇博客,与大家分享. 简介 LRecyclerView是支持addHeaderView. addFooterView.下拉刷新.分页加载数据的RecyclerView. 它对 RecyclerView 控件进行了拓展,给RecyclerView增加HeaderView.FooterView,并且不需要对你的Adapter做任何修改. 主要功能 下拉刷新.滑动到底部自动加载下页数据: 可以方便添加Header和Foot

手机H5页面,滑动到底部自动加载下一页内容

做公众号项目中有如下场景,一个H5页面有列表数据,不考虑一次加载所有数据,故需要分页操作,解决方案为滑动到底部自动加载下一页内容.直接在H5的js当中实现. 主要使用jquery的scroll()方法: 当用户滚动指定的元素时,会发生 scroll 事件. scroll 事件适用于所有可滚动的元素和 window 对象(浏览器窗口). scroll() 方法触发 scroll 事件,或规定当发生 scroll 事件时运行的函数. 代码如下: $(window).scroll(function()

笔记-移动端滑动到底部自动加载下一页内容

公司微信公众号的网页由ThinkPHP框架的模板生成,由一个需求是滑动到底部时自动加载下一页内容. 1.网页结构 网页分为两个部分,顶部固定导航栏,下部有一个page容器,内部滚动显示. 2.加载下一页的流程 当滑动到底部时,发送ajax请求下一页内容,内容返回后,将内容拼接成HTML结构后插入原有的page下. 页面是后端已经分好的,所以ajax请求的数据中包含一个currentpage变量,这个变量每次请求时自增1,表示请求下一页. 3.如何实现 想着原理比较简单,所以自己实现了一下,实现思

RecyclerView滑动到底部自动加载

你经常听到“上拉加载”这样的字眼吗?你知道这个功能是怎么实现的吗?这篇文章记录了我对“上拉加载”的实现,与大家一起分享. “上拉加载”针对的是RecyclerView或者Listview这样的列表控件(本文以RecyclerView为例),一般和“数据分页”配合使用,旨在实现“分页加载,随用随取”,从而避免了一个接口返回过多的数据. RecyclerView每加载一个item都会调用一次onBindViewHolder方法,并且只在item由不可见变为可见的时候才会调用此方法.我们可以通过onB

listview滚动到底部自动加载数据

在android中listvieww加载数据,有的是分批加载,比如每次加载20条,100条就要加载5次,如果一次性加载100条,listview加载就变的慢,如果是有图片的话,一时浪费流量,二是item中带图片会出现错位的问题,listview加载数据目前好多app做法 一:分批加载 滑动到底部自动更新 二:滑动到底部 手动的点击加载更多 三:下拉刷新+底部加载更多 今天就讲下listview滑动到底部自动更新 分析:监听listview的滑动事件,判断listview是否滑动到底部,然后去加载

[转]ListView滚动到底部自动加载数据

转自:http://blog.csdn.net/shineflowers/article/details/41744241 在Android中有很多时候会选择用ListView加载数据,有的是分批加载,比如每次加载20条,100条就要加载5次,如果一次性加载100条,ListView加载就会变慢,如果是有图片的话,一是浪费流量,二是item中带图片会出现错位的问题l,ListView加载数据目前好多App的做法 1. 分批加载,滑动到底部自动更新 2. 滑动到底部,手动的点击加载更多 3. 下拉

探索SwipeRefreshLayout配合自定义ListView完成下拉刷新、滑到底部自动加载更多

在Android开发过程中经常需要实现上下拉刷新功能,Google推出的下拉刷新控件SwipeRefreshLayout(彩虹条),由于官方版本只有下拉刷新而没有上拉加载更多的功能,很多人也尝试在这个基础上进行改写.今天尝试一下使用SwipeRefreshLayout配合自定义ListView实现下拉刷新.滑到底部自动加载更多的功能. 效果图如下所示,在进入页面的时候加载自动刷新,滑到底部自动加载更多,当数据已经加载完成则显示已经加载完成,,否则上拉任可继续加载 先贴一下项目结构图吧,这样可能对

页面滚动到底部自动加载下一页功能的实现

页面滚动到底部自动加载下一页功能的实现,效果见本博首页 1.endlesspage.js文件内容 var gPageSize = 10; var i = 1; //设置当前页数,全局变量 var finished = false; var dataUrl = ''; $(function () { //根据页数读取数据 function getData(pagenumber) { //console.log(i); $.get(dataUrl, { pagesize: gPageSize, p:

当滚动条滚动到页面底部自动加载增加内容的js代码

这篇文章主要介绍了如何使用javscript实现滚动条滚动到页面底部自动加载增加页面内容,需要的朋友可以参考下..1,注册页面滚动事件,window.onscroll = function(){ }; 2,相关获取页面高度.滚动条位置.文档高度的函数: 复制代码 代码如下://获取滚动条当前的位置 function getScrollTop() { var scrollTop = 0; if (document.documentElement && document.documentEle