ListView之数据加载
来源:互联网 发布:苏州俊知地产 编辑:程序博客网 时间:2024/04/28 11:55
1 需求
数据库中获取数据;
滑动加载数据;
显示数据的时候为不影响手机性能和增加手机的流量负担,每次只加载少量的数据;不滑动,则不加载新的数据。
2 解决思路
2.1 定义你的数据集,根据实际情况而定;
2.2假定数据集List,这里面先存放首次下载的数据,比如先下载10条;
2.3滑动到页尾的时候,添加加载画面,同时开个线程下载后面10条数据,每下载好10条数据就添加到你定义的数据集里面,然后在这个线程里面发个handler消息通知主线程,在handlerMessage()里面调用adapter.notifyDatabaseChanged()方法刷新界面;
2.4 所有数据记载完后,移除页脚View。
3 实现
3.1 下载数据的线程
/*** [更新数据线程]*/private void updateItemInfoList() {fechDataThread = new Thread(new Runnable() {@Overridepublic void run() {if (ItemInfoList.size() < count) {//count为数据总数ItemInfoListTemp = getInfo();//获取本次加载的数据} else {//所有数据都取完ItemInfoListTemp = null;}try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}Message message = new Message();message.what = 1;ListViewUpdate.this.getHandler().sendMessage(message);}});fechDataThread.start();}
3.2 数据库中取出数据封装。此处是模拟数据
/*** [每次取出等量条数据放入ItemInfoTemp]*/private List< ItemInfo > getInfo() {ArrayList< ItemInfo > ItemInfoTemp = new ArrayList< ItemInfo >();//模拟数据for(int i=0;i<10;i++){ItemInfo info = new ItemInfo();info.setIcon(icon);info.setTitle("Title"+i);info.setContent("Content"+i);ItemInfoTempList.add(info);}return ItemInfoTemp;}
3.3 Handler发送消息
/*** [Handler消息机制]* @return Handler*/private Handler createHandler() {Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case 1:if (ItemInfoListTemp != null) {ItemInfoList.addAll(ItemInfoListTemp);ItemAdapter.notifyDataSetChanged();//刷新界面loading.setVisibility(View.GONE);refreshable = true;//初始化为false} else {loading.setVisibility(View.GONE);Toast.makeText(mContext,"已显示全部数据!",Toast.LENGTH_LONG).show();listView.removeFooterView(loading);//数据全部加载完成,移除页脚}break;default:break;}}};return handler;}
3.4 重写onScroll方法
@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {// TODO Auto-generated method stubif ((firstVisibleItem + visibleItemCount == totalItemCount)&& (totalItemCount != 0)) {if (refreshable) {refreshable = false;loading.setVisibility(View.VISIBLE);updateItemInfoList ();}}}
4 截图
- ListView之数据加载
- Android之ListView分页数据加载
- Android开发之ListView分页加载数据
- Android初学之listView分批加载数据
- android之ListView分页加载数据
- Android编程之ListView分页加载数据
- ListView数据动态加载
- Listview动态加载数据
- Listview动态加载数据
- ListView动态加载数据
- ListView 分段加载数据
- Listview动态加载数据
- ListView中加载数据
- ListView分页加载数据
- Listview动态加载数据
- Listview动态加载数据
- ListView分页加载数据
- listView分页加载数据
- 双向链表的实现2
- ExtJS 组件扩展 组件化编程 扩展组件 组件编程(二)
- ActionScript与JavaScript通信
- 寄存器知识回顾
- android手机上无法建立账户
- ListView之数据加载
- Hadoop InputFormat浅析
- struct 探索
- STM32菜鸟成长记录---普通定时器应用
- 双向链表的实现3
- VS2008设置内存断点
- vlan学习笔记
- 图像处理 灰度的线性变换
- JAVA编程中提高性能