首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android开发札记-ListView动态加载数据

2012-06-29 
android开发笔记-ListView动态加载数据项目开发之需要, 做一个ListView分页显示, 动态加载数据到ListView.

android开发笔记-ListView动态加载数据

项目开发之需要, 做一个ListView分页显示, 动态加载数据到ListView. 需求是: 每一次ListView显示20条数据, 当滚动条滑动到最后一条的时候, ListView会自动到后台请求数据并加载到ListView. 一开始, 没有思路, 后来到网上搜了下:步骤是这样的. 1. 在ListView的 OnScrollListener 事件中:

@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {// TODO Auto-generated method stubif (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {//Log.i(TAG, "获取第一个可见位置:" + listPos);listPos = mListView.getSelectedItemPosition(); // ListPos记录当前可见的List顶端的一行的位置}}

?然后, 在数据设置到ListView的adapter后 , 设置ListView的setSelection(listPos)方法;

?

这种方式虽然能够实现以上功能 ,但:效果不明显, 定位不准确, 而且ListView会给人一种刷新的感觉, 而不是异步后台加载数据.

?

后来,通过网上不断的搜索 , 终于找到了另一种比较合理的方法

?

1. 实例化ListView

//1. 获取ListViewmListView = getListView();setupListHeader(true);mListAdapter = new NewsListViewAdapter(this,((Foursquared) getApplication()).getRemoteResourceManager());//2. 设置mListView的适配器: adaptermListView.setAdapter(mListAdapter);

?

2. ListView添加滑动事件:

// 添加滚动条滑动事件mListView.setOnScrollListener(new AbsListView.OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {loadMoreGIF.setVisibility(View.VISIBLE);if (mStateHolder.getIsRunningTask() == false) {                                                       //mSearchTask 是一个继承了AysncTask的线程.向后台加载数据.mSearchTask = new SearchTask(activity, query, sleepTimeInMs);                                mSearchTask.execute();        }}}});

?

3. 后台数据加载完之后, 将结果添加到Adapter. 然后调用: Adapter的notifyDataSetChanged()方法.

?

注意: 数据加载完, 并设置Adapter值后, 不不需要调用ListView.setAdapter(adapter).方法. 否则ListView会重新刷新一遍, 就不会有异步加载数据的效果. 只需修改adapter值之后, 调用notifyDataSetChanged()即可.

?

?

热点排行