【Android进阶】Listview分页加载数据的实现
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分页加载数据的实现的更多相关文章
- Android中ListView分页加载数据
public class MainActivity extends Activity { private ListView listView=null; //listview的数据填充器 privat ...
- java攻城狮之路(Android篇)--widget_webview_metadata_popupwindow_tabhost_分页加载数据_菜单
一.widget:桌面小控件1 写一个类extends AppWidgetProvider 2 在清单文件件中注册: <receiver android:name=".ExampleA ...
- listView 分页加载数据
Android应用 开发中,采用ListView组件来展示数据是很常用的功能,当一个应用要展现很多的数据时,一般情况下都不会把所有的数据一次就展示出来,而是通过分页 的形式来展示数据,个人觉得这样会有 ...
- Android中ListView动态加载数据
1. 引言: 为了提高ListView的效率和应用程序的性能,在Android应用程序中不应该一次性加载ListView所要显示的全部信息,而是采取分批加载策略,随着用户的滑动,动态的从后台加载所需的 ...
- Android 自定义ListView动态加载数据
我们都知道网络取数据是耗时操作,如果我们一次性请求所有数据,假如数据量不多那还可以接受,但是如果数据量特别多,那么带来的后果就是用户的愤怒(用户是很没有耐心的),所以这时候我们就需要动态的加载数据,分 ...
- android ListView 分页加载数据
1.mainActivity <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...
- Android中ListView异步加载数据
1.主Activity public class MainActivity extends Activity { private ListView listView; private ArrayLis ...
- Android之ListView&Json加载网络数据
使用到的主要内容: 1.Json 解析网络数据 2.异步任务加载图片和数据 3.ListView 的内存空间优化(ConvertView)和运行时间优化(ViewHolder) 4.ListView ...
- Android的ListView异步加载图片时,错位、重复、闪烁问题的分析及解决方法
Android ListView异步加载图片错位.重复.闪烁分析以及解决方案,具体问题分析以及解决方案请看下文. 我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图 ...
随机推荐
- poj1797(最短路小变形)
题目连接:http://poj.org/problem?id=1797 题意: 分析:dp[i]表示到达i点的过程中的最大承受重量,更新到i点时可能有多条路径,由优先队列堆出最大的那条即可. #inc ...
- angular学习(二):Controller定义总结
上文中总结完了ng-view的应用,将运维后台分开界面到2个,进行到 逻辑Controller处理中,本文将总结一下在项目中Controller都用到了哪些知识: $scope:作用域对象,仅仅是代表 ...
- java 线程 ProducerAndConsumer
package j2se.thread.demo; /** * <p>Project:J2SE 的基础知识</p> * <p>Tile:多线程模拟 生产者 和 消费 ...
- linux LNMP自动安装脚本
#!/bin/bashsoft_dir="/home/soft"config_dir="/home/config"httpd="httpd-2.0.5 ...
- Swift 的类、结构体、枚举等的构造过程Initialization(下)
类的继承和构造过程 类里面的全部存储型属性--包含全部继承自父类的属性--都必须在构造过程中设置初始值. Swift 提供了两种类型的类构造器来确保全部类实例中存储型属性都能获得初始值,它们各自是指定 ...
- poj1236 有向图加边变成强连通图
给我们一个有向图,有两个问题 1.最少要给多少个点发消息,才能使得所有的点都收到消息(消息可以随边传递) 2.最少需要多少条边才能使得图变成强连通图 对于一个强连通分量,可以当做一个点来考虑,所以我们 ...
- 元素z-index继承问题
两同层元素.当中一个的子元素定位与还有一个重叠时,该子元素被覆盖(此时子元素的z-index继承的是其父元素的z-index,不管其z-index多少均被覆盖) <html> <he ...
- Android在ExpandableListView控制的基本使用
在本文中,Demo为了展示Android在ExpandableListView用途管制.如该组/儿子ListView绑定数据源. 直接上代码例如以下: 程序结构图: layout文件夹下的 main. ...
- 设计模式——辛格尔顿(Singleton)
要想正确理解设计模式,首先必须明白它是为了解决什么问题而提出来的. 设计模式学习笔记 --Shulin 转载请注明出处:http://blog.csdn.net/zhshulin 单例模式属于设计模式 ...
- poj 1789 Truck History(kruskal算法)
主题链接:http://poj.org/problem?id=1789 思维:一个一个点,每两行之间不懂得字符个数就看做是权值.然后用kruskal算法计算出最小生成树 我写了两个代码一个是用优先队列 ...