ListView 分页加载更新实例分享
时间:2021-09-05 06:53:11
ListView是android中最常用的控件之一。
在实际运用中往往会遇到一次性加载全部数据过多,需要分页加载增加程序运行效率!
本demo是将更新的监听放在listview的foot中,通过底部按钮点击触发或者通过滑动事件监听,当滑动到列表最底部的时候触发。
有图有真像:
列表初始状态
触发加载
加载后
部分代码:
MainActivity
private void initActivity() {
// TODO Auto-generated method stub
loadMoreView = getLayoutInflater().inflate(R.layout.loadmore, null);
loadmore_btn = (Button) loadMoreView.findViewById(R.id.loadmore_btn);
loadmore_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
doUpdate();
}
});
listView = (ListView) findViewById(R.id.listView);
listView.addFooterView(loadMoreView);
initAdapter();
listView.setAdapter(adapter);
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
int itemsLastIndex = adapter.getCount() - 1;
int lastIndex = itemsLastIndex + 1;
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE
&& visibleLast == lastIndex) {
// 可在这添加滑到列表底的时候异步自动加载
// doUpdate();
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
visibleCount = visibleItemCount;
visibleLast = firstVisibleItem + visibleItemCount - 1;
}
});
}
protected void doUpdate() {
// TODO Auto-generated method stub
loadmore_btn.setText("loading ...");
handler.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
loadData();
adapter.notifyDataSetChanged();// 通知adapter数据变化
listView.setSelection(visibleLast - visibleCount + 1);
loadmore_btn.setText("Load More");
}
}, 2000);
}
private void loadData() {
// TODO Auto-generated method stub
int count = adapter.getCount();
for (int i = count; i < count + 10; i++) {
adapter.addItem(String.valueOf(i + 1));
}
}
private void initAdapter() {
// TODO Auto-generated method stub
List<String> items = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
items.add(String.valueOf(i + 1));
}
adapter = new ListAdapter(this, items);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
ListAdapter
public ListAdapter(Context context, List<String> items) {
this.items = items;
this.inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return items.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return items.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item, null);
}
TextView textView = (TextView) convertView
.findViewById(R.id.list_item_text);
textView.setText(items.get(position));
return convertView;
}
/**
* 添加列表项
* @param item
*/
public void addItem(String item){
items.add(item);
}
提醒一下:要下载android-support-v4.jar 这个第三方的jar包哦! 这里就不提供下载了!
标签:listview,分页,加载
0
投稿
猜你喜欢
在项目中直接使用hystrix的流程分析
2021-10-22 01:55:21
Spring Boot中如何使用断路器详解
2022-03-03 06:34:49
maven <repositories>标签和<pluginRepositories>标签的使用
2022-09-26 01:06:33
Javaweb获取表单数据的多种方式
2022-12-25 18:13:41
C# Winform中如何绘制动画示例详解
2022-03-28 13:26:26
c# list部分操作实现代码
2021-09-25 03:43:19
Spring Boot整合MyBatis操作过程
2022-08-02 13:50:22
Android Flutter实现3D动画效果示例详解
2022-04-12 19:34:35
Android开发中的简单设置技巧集锦
2021-10-10 04:40:35
Android 微信摇一摇功能实现详细介绍
2023-06-21 21:00:09
C#利用Task实现任务超时多任务一起执行的方法
2023-07-04 20:03:38
Maven安装与配置及Idea配置Maven的全过程
2023-05-20 01:37:59
C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信
2021-10-21 09:08:21
Spring的Aware接口实现及执行顺序详解
2023-03-09 09:50:53
Java毕业设计实战之二手书商城系统的实现
2022-03-21 14:06:20
浅谈Android手机的抢红包插件
2021-08-13 01:04:36
SpringBoot项目的测试类实例解析
2021-05-29 20:35:04
Gradle属性设置及环境变量全面教程
2023-08-10 18:20:51
android自定义简单时钟
2022-01-10 03:00:22
java Stream流常见操作方法(反射,类加载器,类加载,反射)
2022-03-24 06:54:56