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() {
@Override
public 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() {
@Override
public 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方法
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
if ((firstVisibleItem + visibleItemCount == totalItemCount)
&& (totalItemCount != 0)) {
if (refreshable) {
refreshable = false;
loading.setVisibility(View.VISIBLE);
updateItemInfoList ();
}
}
}
4 截图