ListView 分页加载更新实例分享

时间:2021-09-05 06:53:11 

ListView是android中最常用的控件之一。

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

猜你喜欢

  • Java进程cpu占用过高问题解决

    2021-08-09 00:16:59
  • Android带清除功能的输入框控件EditTextWithDel

    2022-02-13 16:53:27
  • 解决fastjson从1.1.41升级到1.2.28后报错问题详解

    2021-12-30 21:55:35
  • Java实现发送邮件并携带附件

    2023-07-23 19:02:25
  • java反射机制给实体类相同字段自动赋值实例

    2023-11-25 19:52:29
  • Java多线程之ThreadLocal浅析

    2023-06-19 19:55:37
  • 基于springboot的flowable工作流实战流程分析

    2022-11-28 08:27:09
  • C#中字符串编码处理

    2023-10-03 09:56:12
  • android 横竖屏限制的配置方法

    2023-02-06 21:55:45
  • Java Synchronized锁失败案例及解决方案

    2023-10-25 12:33:47
  • Mybatis如何实现@Select等注解动态组合SQL语句

    2022-04-13 16:42:05
  • java中常见的死锁以及解决方法代码

    2023-04-07 19:47:30
  • Springboot+SpringSecurity+JWT实现用户登录和权限认证示例

    2021-11-14 11:06:11
  • springmvc 参数绑定总结

    2023-11-16 21:30:44
  • Java中BufferedReader和BufferedWriter使用方式

    2022-01-06 15:06:05
  • 关于Spring Boot项目的 log4j2 核弹漏洞问题(一行代码配置搞定)

    2022-08-26 03:04:20
  • Java枚举的七种常见用法总结(必看)

    2022-10-10 08:38:43
  • MyBatis3源码解析之如何获取数据源详解

    2023-12-06 02:23:08
  • Mybatis-plus多租户项目实战进阶指南

    2023-10-10 18:14:43
  • Java链表(Linked List)基本原理与实现方法入门示例

    2021-10-12 05:49:14
  • asp之家 软件编程 m.aspxhome.com