【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异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图 ...
随机推荐
- ARM体系结构与编程
ARM处理器的7中执行模式:usr.fiq.irq.svc.abt.und.sys. ARM处理器共37个寄存器:31个通用寄存器(未备份寄存器R0-R7,在全部模式下指的都是同一个物理寄存器:备份寄 ...
- Android 自己实现 NavigationView [Design Support Library(1)]
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/46405409: 本文出自:[张鸿洋的博客] 一.概述 Google I/O 2 ...
- 全栈project师的毁与誉
全栈(Full Stack)project师.也能够叫全端project师,不管是前端知识,还是后端架构你都要了解.甚至有些调皮的程序猿这样理解全栈project师:全栈project师 = 屌丝战斗 ...
- 期望dp专题
一直不明白为什么概率是正推,期望是逆推. 现在题目做多了,慢慢好像有点明白了 poj2096 收集bug, 有n个种类的bug,和s个子系统. 每找到一个bug需要一天. 要我我们求找到n个种类的 ...
- I深搜
<span style="color:#330099;">/* I - 深搜 基础 Time Limit:1000MS Memory Limit:10000KB 64b ...
- ecshop2.7.3怎么自动清除缓存
1.在ecs_shop_config表中插入一条数据 进入ECSHOP后台-数据库管理-SQL查询 复制下面SQL,粘贴到里面执行.注意这时是默认表前缀ecs_,如果你的修改过要和你的统一了. INS ...
- SQL Server,Access数据库查询易混点和C#中parameter指定参数长度的优缺点
在学校的时候就经常做一些网站,所以这次在公司实习,组长第一次给了一个企业的网站还是很快的完成了.中间并没有遇到什么大的问题,但是还是遇到了两个新手非常容易混淆的小问题,所以拿出来跟大家分享一下. 主要 ...
- SIP基本呼叫
我们首先来看下主要的呼叫流程. INVITEsip:69690067@beijing.chinamobile.com;user=phone SIP/2.0 From:"+8610696900 ...
- MultiROM for the XIAOMI MI2S/2C/2! (Kexec HardBoot Enabled with Kexec HardBoot Patch!)
Introduction This is a port of Tassadar's MultiROM, a multi-boot mod for XIAOMI MI2/2S/2C. The main ...
- 【PHP】PHP5.4.0版本号ChangeLog具体解释(上)
前言 随着大量的框架使用composer和namespace,渐渐的线上环境也从之前的5.3变成了5.4或者5.5甚至5.6,随着7月份PHP7的公布,会有很多其它的公司採用新版本号. 之前好久就想写 ...