zl程序教程

您现在的位置是:首页 >  后端

当前栏目

ListView分页加载更新实例分享

实例 分享 更新 加载 分页 listview
2023-06-13 09:14:41 时间
ListView是android中最常用的控件之一。

在实际运用中往往会遇到一次性加载全部数据过多,需要分页加载增加程序运行效率!
本demo是将更新的监听放在listview的foot中,通过底部按钮点击触发或者通过滑动事件监听,当滑动到列表最底部的时候触发。
有图有真像:
列表初始状态
 
触发加载
 
加载后
 
部分代码:
MainActivity
复制代码代码如下:

privatevoidinitActivity(){
//TODOAuto-generatedmethodstub
loadMoreView=getLayoutInflater().inflate(R.layout.loadmore,null);
loadmore_btn=(Button)loadMoreView.findViewById(R.id.loadmore_btn);
loadmore_btn.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
doUpdate();
}
});
listView=(ListView)findViewById(R.id.listView);
listView.addFooterView(loadMoreView);
initAdapter();
listView.setAdapter(adapter);
listView.setOnScrollListener(newOnScrollListener(){
@Override
publicvoidonScrollStateChanged(AbsListViewview,intscrollState){
//TODOAuto-generatedmethodstub
intitemsLastIndex=adapter.getCount()-1;
intlastIndex=itemsLastIndex+1;
if(scrollState==OnScrollListener.SCROLL_STATE_IDLE
&&visibleLast==lastIndex){
//可在这添加滑到列表底的时候异步自动加载
//doUpdate();
}
}
@Override
publicvoidonScroll(AbsListViewview,intfirstVisibleItem,
intvisibleItemCount,inttotalItemCount){
//TODOAuto-generatedmethodstub
visibleCount=visibleItemCount;
visibleLast=firstVisibleItem+visibleItemCount-1;
}
});
}
protectedvoiddoUpdate(){
//TODOAuto-generatedmethodstub
loadmore_btn.setText("loading...");
handler.postDelayed(newRunnable(){
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
loadData();
adapter.notifyDataSetChanged();//通知adapter数据变化
listView.setSelection(visibleLast-visibleCount+1);
loadmore_btn.setText("LoadMore");
}
},2000);
}
privatevoidloadData(){
//TODOAuto-generatedmethodstub
intcount=adapter.getCount();
for(inti=count;i<count+10;i++){
adapter.addItem(String.valueOf(i+1));
}
}
privatevoidinitAdapter(){
//TODOAuto-generatedmethodstub
List<String>items=newArrayList<String>();
for(inti=0;i<10;i++){
items.add(String.valueOf(i+1));
}
adapter=newListAdapter(this,items);
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
getMenuInflater().inflate(R.menu.activity_main,menu);
returntrue;
}

ListAdapter
复制代码代码如下:

publicListAdapter(Contextcontext,List<String>items){
this.items=items;
this.inflater=(LayoutInflater)context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
publicintgetCount(){
//TODOAuto-generatedmethodstub
returnitems.size();
}
@Override
publicObjectgetItem(intposition){
//TODOAuto-generatedmethodstub
returnitems.get(position);
}
@Override
publiclonggetItemId(intposition){
//TODOAuto-generatedmethodstub
returnposition;
}
@Override
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
//TODOAuto-generatedmethodstub
if(convertView==null){
convertView=inflater.inflate(R.layout.list_item,null);
}
TextViewtextView=(TextView)convertView
.findViewById(R.id.list_item_text);
textView.setText(items.get(position));
returnconvertView;
}
/**
*添加列表项
*@paramitem
*/
publicvoidaddItem(Stringitem){
items.add(item);
}

提醒一下:要下载android-support-v4.jar这个第三方的jar包哦!这里就不提供下载了!