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 截图

原创粉丝点击