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动态加载数据

    我们都知道网络取数据是耗时操作,如果我们一次性请求所有数据,假如数据量不多那还可以接受,但是如果数据量特别多,那么带来的后果就是用户的愤怒(用户是很没有耐心的),所以这时候我们就需要动态的加载数据,分 ...

  6. android ListView 分页加载数据

    1.mainActivity <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  7. Android中ListView异步加载数据

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

  8. Android之ListView&Json加载网络数据

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

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

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

随机推荐

  1. 在Windows通过使用MinGW静态编译Assimp

    使用MinGW静态编译Assimp 到了5月份了.没有写一篇日志,于是自己从知识库里面拿出一篇文章充数吧.这次将要解说怎样在Windows下使用MinGW静态编译Assimp. Assimp是眼下比較 ...

  2. JQuery开发工具和插件

    最近的研究jquery.为大家介绍几款开发工具.能够帮助你提高开发的效率. 1.Dreamweaver Dreamweaver是建立在WEB站点和应用程序的专业工具. 将可视化工具.应用程序开发功能和 ...

  3. 前端控件之Jquery datetimepicker的使用总结

    效果图 在介绍jquery datetimepicker的使用方法前,我们先来看一下它的实现效果图,这样以便让你更快地了解它是否是你所需要的. 下面我截了四张常用的效果图(截取自http://xdso ...

  4. ElasticSearch+Kibana 索引操作

    ElasticSearch+Kibana 索引操作 一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引 ...

  5. 阿尔贝我给我加i觉

    http://www.huihui.cn/share/8192186       http://www.huihui.cn/share/8192178       http://www.huihui. ...

  6. 使用SSIS对Dynamics CRM 系统进行数据迁移

    嗨,各位.近期项目一直都非常忙,而且自己也一直在思考职业发展的问题,所以有非常长一段时间没静下心写几篇Blog了.近期我參与的项目是Dynamics CRM 2011 到 Dynamics CRM 2 ...

  7. Java集合关于ArrayList

    ArrayList实现源码分析 2016-04-11 17:52 by 淮左, 207 阅读, 0 评论, 收藏, 编辑 本文将以以下几个问题来探讨ArrayList的源码实现1.ArrayList的 ...

  8. poj1804(归并排序求逆序数)

    逆序数.也就是说,对于n个不同的元素,先规定各元素之间有一个标准次序(比如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同一时候,就说 ...

  9. Ajax—初识

    看DRP的过程.又一次学习了一遍Ajax.更深刻的体会到了Ajax所具有的魅力.Ajax是一种技术或者方法,更是一 种艺术.它让我们的程序以一种更完美的姿态呈如今用户面前.以下就让我们一起走进Ajax ...

  10. OUI-67076 : OracleHomeInventory was not able to create a lock file&quot; in Unix

    Symptoms The command "opatch lsinventory" reports the error: OUI-67076:OracleHomeInventory ...