ListView分页加载更新实例分享
实例 分享 更新 加载 分页 listview
2023-06-13 09:14:41 时间
ListView是android中最常用的控件之一。
在实际运用中往往会遇到一次性加载全部数据过多,需要分页加载增加程序运行效率!
本demo是将更新的监听放在listview的foot中,通过底部按钮点击触发或者通过滑动事件监听,当滑动到列表最底部的时候触发。
有图有真像:
列表初始状态
触发加载
加载后
部分代码:
MainActivity
复制代码代码如下:
在实际运用中往往会遇到一次性加载全部数据过多,需要分页加载增加程序运行效率!
本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包哦!这里就不提供下载了!
相关文章
- VB实现鼠标绘图实例代码分享
- RTMP流转发(Forward)部署实例
- Linux安装MySQL数据库指南(linux安装数据库实例)
- 实用Linux运维脚本:打造无与伦比的效率(linux运维脚本实例)
- MySQL循环语句简单查询实例(mysql循环语句查询)
- 学习Linux:实际操作示例分享(linux操作实例)
- 简单易行的Oracle实例卸载方法分享(卸载oracle实例)
- MongoDB实战经验分享:探索应用案例(mongodb应用实例)
- MSSQL中解密函数编写实例分享(mssql解密函数怎么写)
- 快速创建Redis多实例,分享Redis强力性能(创建redis多实例)
- 微擎多实例对接Redis实现负载均衡(多个微擎对接redis)
- Oracle三级项目实施经验分享(oracle三级项目实例)
- Oracle三实例搭建精彩经验分享(oracle 3个实例)
- asp.net获取图片高度和宽度实例代码
- 教你怎么使用sql游标实例分享
- php调用dll的实例操作动画与代码分享
- ASP.NETWebAPI教程创建Admin控制器实例分享
- Oracle存储过程返回游标实例详解
- jQueryJSON实现无刷新三级联动实例探讨
- ASP.NETGridview中使用checkbox删除的2种方法实例分享
- c#远程html数据抓取实例分享
- 通过代理类实现java连接数据库(使用dao层操作数据)实例分享
- 实例分析javascript中的call()和apply()方法
- Python列表计数及插入实例
- jQueryajax调用WCF服务实例
- MongoDB入门教程之C#驱动操作实例
- 使用mysqld_multi实现单系统中配置多个MySQL服务器实例