ListView 分页加载更新实例分享_Android

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包哦! 这里就不提供下载了!

时间: 2024-11-29 18:40:07

ListView 分页加载更新实例分享_Android的相关文章

ListView 分页加载更新实例分享

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

Android中ListView分页加载数据功能实现_Android

 熟悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们今天就要讲一讲列表组件ListView加载数据的相关内容.通常来说,一个应用在展现大量数据时,不会将全部的可用数据都呈现给用户,因为这不管对于服务端还是客户端来说都是不小的压力,因此,很多应用都是采用分批次加载的形式来获取用户所需的数据.比如:微博客户端可能会在用户滑动至列表底端时自动加载下一页数据,也可能在底部放置一个"加载更多"按钮,用户

Android App中实现图片异步加载的实例分享_Android

一.概述一般大量图片的加载,比如GridView实现手机的相册功能,一般会用到LruCache,线程池,任务队列等:那么异步消息处理可以用哪呢? 1.用于UI线程当Bitmap加载完成后更新ImageView 2.在图片加载类初始化时,我们会在一个子线程中维护一个Loop实例,当然子线程中也就有了MessageQueue,Looper会一直在那loop停着等待消息的到达,当有消息到达时,从任务队列按照队列调度的方式(FIFO,LIFO等),取出一个任务放入线程池中进行处理. 简易的一个流程:当需

Android之ListView分页加载数据功能实现代码

什么是ListView分页加载数据功能呢?在现在的大数据时代,我们不可能把某些数据全部展示到界面,好比我们经常会看的QQ空间一样,当你看动态的时候,系统不可能会把所有好友的动态都展示在上面,你能看到的一般都是最新好友更新的动态,假如你要看非最新的好友动态,通常你都会手指向上滑动屏幕然后去查看,当界面下滑到一定数量的时候,就会看到一个"查看更多",然后突然停顿一下,系统会通过网络去给你刷新其他动态信息,这样的功能我们一般叫做数据下拉刷新功能,也就是我们的分页加载功能,具体的实现是怎样的呢

listview分页加载,获取总条数

问题描述 listview分页加载,获取总条数 listview访问后台数据库进行分页加载,怎么得到数据的总条数,然后对其进行判断分页加载.总条数是需要后台服务器传过来的么,还是-- 解决方案 如果要获取总条数 都是要从服务器传过来,.

Android实现ListView异步加载图片的方法_Android

本文实例讲述了Android实现ListView异步加载图片的方法.分享给大家供大家参考.具体如下: ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,不用让用户等待下去,下面就说实现方法,先贴上主方法的代码: package cn.wangmeng.test; import java.io.IOException; import java.io.InputStream; import java.lang.ref.SoftReferen

Android实现ListView异步加载的方法(改进版)_Android

本文实例讲述了Android实现ListView异步加载的方法.分享给大家供大家参考,具体如下: @Override public View getView(int position, View convertView, ViewGroup parent) { ---- ViewHolder VH = null; ---- VH.mImageView.setTag(position); VH.mThumb.setImageDrawable(imageLoader.loadDrawable(pos

Android的Activity加载方式实例分析_Android

本文实例分析了Android的Activity加载方式.分享给大家供大家参考,具体如下: 前面分析过Android中activity的加载方式(参考前面一篇<Android编程之四种Activity加载模式分析>),这里进一步分析一下. 关于Activity加载方法,无非就是 Intent intent = new Intent(); intent.setClass(ActA.this, ActA.class); startActivity(intent); 以前遇到的一个问题:不停运行这段代

ListView异步加载图片实现思路_Android

在应用开发中,经常用到ListView去加载数据,加载图片和文字是比较常见的,文字还好,图片从网络请求加载速度比较慢,所以需要把图片的加载放到另一个线程中去执行,执行完了再更新UI线程.以下列出一个我在项目中使用到的异步加载图片的解决方案,代码没有上全,给出核心部分. 大致思路是这样: 1.利用软引用来缓存图片Bitmap,用图片的URL作为缓存查找的Key: 2.设两级缓存,一级是SoftReference,二级是本地SD卡: 3.如果两级缓存都没取到图片,则从服务器获取,并加入缓存: 4.加