在滑动的过程中,只有在视野中的item才会加载数据,其他的其实显示的都是”loading…” 这样的好处就是如果加载的是图片的话,那么始终加载的只是几张图片而非是所有的图片,这样就能很好的避免出现内存溢出的问题,当然其他的图片要及时的回收才行,否则图片对象依然在内存里(这样的话图片最好先保存在本地,这样就不会频繁的发送请求,就不会产生网络流量),关于加载大量图片的问题会在以后的文章中出现。下面就看代码,非常简单。
public class ListViewTest extends Activity implements ListView.OnScrollListener {
private boolean mBusy = false;
ListView l;
SlowAdapter slowAdapter;
int totalPage = 10;// 共有页数
int nowPage = 1;// 当前页
int lastItem = 0;
List<String> mStrings= new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
l = (ListView) findViewById(R.id.mainList);
getListByPage(nowPage);
slowAdapter=new SlowAdapter(this,mStrings);
l.setAdapter(slowAdapter);
l.setOnScrollListener(this);
}
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
lastItem = firstVisibleItem + visibleItemCount - 1;
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { //滑动停止
mBusy = false;
if(lastItem==mStrings.size()-1){
nowPage++;
if (nowPage <= totalPage) {
getListByPage(nowPage);
}
}
slowAdapter.notifyDataSetChanged();
}
else if(scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL){//滑动手未松开
mBusy = true;
}else if(scrollState == OnScrollListener.SCROLL_STATE_FLING){//滑动中手已松开
mBusy = true;
}
}
private class SlowAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<String> list;
public SlowAdapter(Context context,List<String> list) {
this.list=list;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return list.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
TextView text;
if (convertView == null) {
text = (TextView)inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
} else {
text = (TextView)convertView;
}
if (!mBusy) {
text.setText(list.get(position));
} else {
text.setText("Loading...");
}
return text;
}
}
public void getListByPage(int page){
int start = (page-1)*20;
int size=page*20;
for(int i=start;i<size;i++){
mStrings.add("条目"+i);
}
}
分享到:
相关推荐
ListView动态加载数据分页,使用Handler+线程和AsyncTask两种方法
listview实现动态加载数据,值得学习
C# WinForm ListView在虚拟模式下,从缓冲之中获取所需的数据进行加载,性能会有很大提高。步骤:(1)必须设置VirtualMode为true并设置VirtualListSize大小;(2)绑定该事件RetrieveVirtualItem(3)如果中间更新了数据...
android 实现listview动态下拉刷新,动态加载数据 可以避免一次数据加载过多
Android 实现ListView滚动到底部自动加载数据
友们在使用ListView的过程中,是否考虑过加载大量的数据时,如何提高显示速度? 朋友你是不是也想对其优化,形成动态加载? 如果你也有过这样的想法,那么我们是同路人! 通过查看ListView的API,我们似乎找不...
listview加载网络数据
android中listview数据分页加载功能实现
内容:上拉加载的整个Demo工程源码 功能:实现ListView上拉加载,列表页脚提示加载状态
listview item 异步加载数据图片
ListView每页加载10条数据,当滑动到页尾时自动加载下面的数据。
Android ListView数据加载
Android ListView 实现分批加载
Listview上拉加载下拉刷新网络数据,数据来自汇通网(股票数据),应该长期有效.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
android listview滑动到底部加载更多数据
Listview上拉加载下拉刷新网络数据,数据来自汇通网(股票数据),应该长期有效,所以可以看到具体功能
android开发的listview下拉刷新加载数据
ListView 动态加载,滑动加载,源代码案例
在项目中,ListView 用得非常普遍,但普通的方式每次加载的数据并未限定,如果获取到上千条或者上万条数据,一次加载完成后再显示的话,会给手机带来很大的负担,用户体验也会相当糟糕。 ListView 中的数据通过分批...
android listView图片异步加载(拖动时不加载,双缓存)