Listview分页加载数据的实现

public class MainActivity extends Activity {
	protected static final int SUCCESS_GET_DATA = 0;
	private ListView listview;
	private DataService service;
	private List<String> data;// 加载的总数据
	private ArrayAdapter<String> adapter;

	private boolean finish = true;// 是否加载完成

	private View footer;

	private Handler mHandler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case SUCCESS_GET_DATA:
				@SuppressWarnings("unchecked")
				ArrayList<String> result = ((ArrayList<String>) msg.obj);
				data.addAll(result);
				// 让listview自动刷新
				adapter.notifyDataSetChanged();
				finish = true;
				// 将页脚删除掉
				if (listview.getFooterViewsCount() > 0) {
					listview.removeFooterView(footer);
				}
				break;

			default:
				break;
			}
		};
	};

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		listview = (ListView) findViewById(R.id.listview);
		service = new DataService();
		data = new ArrayList<String>();
		List<String> result = service.getData(0, 20);
		data.addAll(result);
		adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.tv_info,
				data);
		footer = View.inflate(this, R.layout.footer, null);
		// 在增加listview的页脚之前,需要提前设置一次
		listview.addFooterView(footer);
		listview.setAdapter(adapter);
		// 然后再次将页脚删除掉
		listview.removeFooterView(footer);
		// 滚动监听事件
		listview.setOnScrollListener(new MyOnScrollListener());
	}

	private final class MyOnScrollListener implements OnScrollListener {
		// 加载的总页数
		private int countPage = 5;
		// 每页加载20条数据
		private int pageSize = 20;

		// 滚动状态发生改变时
		public void onScrollStateChanged(AbsListView view, int scrollState) {
			Log.i("i", " scrollState " + scrollState);
		}

		// 当list开始滚动时
		public void onScroll(AbsListView view, int firstVisibleItem,
				int visibleItemCount, int totalItemCount) {
			// 最下面的条目数
			final int totalCount = firstVisibleItem + visibleItemCount;
			int currentPage = totalCount / pageSize;// 当前页
			int nextPage = currentPage + 1;// 下一页
			// 当翻到最后一条数据时
			if (totalCount == totalItemCount && nextPage <= countPage && finish) {
				// 已经移动到了listview的最后
				finish = false;
				// 添加页脚
				listview.addFooterView(footer);
				new Thread() {
					public void run() {
						SystemClock.sleep(3000);
						List<String> result = service.getData(totalCount + 1,
								pageSize);
						Message msg = new Message();
						msg.what = SUCCESS_GET_DATA;
						msg.obj = result;
						mHandler.sendMessage(msg);
					};
				}.start();
			}
		}
	}
}

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

public class DataService {

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


【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异步加载数据

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

  6. Android之ListView&amp;Json加载网络数据

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

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

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

  8. AppCan学习笔记----关闭页面listview动态加载数据

    AppCan页面关闭 AppCan 的页面是由两个HTML组成,如果要完全关闭的话需要在主HTML eg.index.html中关闭,关闭方法:appcan.window.close(-1); 管道 ...

  9. wemall app商城源码Android之ListView异步加载网络图片(优化缓存机制)

    wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之L ...

随机推荐

  1. elasticsearch__5__java操作之FilterBuilders构建过滤器Query

    FilterBuilders构建过滤器Query 代码如下: package com.elasticsearch; import org.elasticsearch.action.ActionList ...

  2. 命令行下Git的使用

    命令行下Git的使用 写在前边的话 以自己即将进行的毕设项目为例,进行Git使用的简易说明.不过由于校园网络的限制,故使用GitOSC. 快速开始 本次git使用位于自己的个人PC上,所以将个人的Gi ...

  3. 常见linux命令释义(第五天)——shell变量学习

    由于时间有限,我写这篇博客的时间上限为30分钟.仅作为学习笔记而用,内容会尽量的讲清楚.如果讲的不清楚,你来打我啊! 玩笑开过,正式开始今天的学习. linux系统的中一些命令是在/bin下,这个是一 ...

  4. UNIX 网络编程第三版

    第五章p102: ps -t  pts/6 -o pid,ppid,tty,stat,args,wchan 在我的系统上运行时出现:TTY not found linux发行版为mint17.1 改用 ...

  5. Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...

  6. liunx下vi命令详解

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  7. 新API:AttachThreadInput

    https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms681956(v=vs.85).aspx

  8. Flume NG中的Kafka Channel

    kafka(官网地址:http://kafka.apache.org)是一款分布式消息发布和订阅的系统 在Flume中的KafkaChannel支持Flume与Kafka整合,可以将Kafka当做ch ...

  9. WebStorm shortcuts.

  10. iOS9中将图片保存到照片中的某个相册的方法说明

    iOS9中将图片保存到照片中的某个相册的方法说明 在App中很经常遇到的就是用户点击某张图片后将图片保存到本地,下面介绍下iOS中保存图片的一些东西 1.首先,在iOS中把图片保存到系统照片是比较简单 ...