android如何给ListView添加动态加载数据  

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

  1.             public void onScrollStateChanged(AbsListView view, int scrollState) {   
  2.                 // TODO Auto-generated method stub   
  3.                 if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {   
  4.                     //Log.i(TAG, "获取第一个可见位置:" + listPos);   
  5.                     listPos = mListView.getSelectedItemPosition(); // ListPos记录当前可见的List顶端的一行的位置   
  6.                 }   
  7.             }  

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

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

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

1. 实例化ListView

  1. //1. 获取ListView   
  2.     mListView = getListView();   
  3.     setupListHeader(true);     
  4.     mListAdapter = new NewsListViewAdapter(this,   
  5.                 ((Foursquared) getApplication()).getRemoteResourceManager());   
  6.     //2. 设置mListView的适配器: adapter   
  7.     mListView.setAdapter(mListAdapter);  

2. ListView添加滑动事件:

  1. // 添加滚动条滑动事件   
  2.         mListView.setOnScrollListener(new AbsListView.OnScrollListener() {     
  3.             @Override  
  4.             public void onScrollStateChanged(AbsListView view, int scrollState) {                  
  5.             }     
  6.             @Override  
  7.             public void onScroll(AbsListView view, int firstVisibleItem,   
  8.                     int visibleItemCount, int totalItemCount) {                                
  9.                         loadMoreGIF.setVisibility(View.VISIBLE);                                
  10.                         if (mStateHolder.getIsRunningTask() == false) {   
  11.                                                        //mSearchTask 是一个继承了AysncTask的线程.向后台加载数据.   
  12.                             mSearchTask = new SearchTask(activity, query, sleepTimeInMs);   
  13.                                             mSearchTask.execute();                            
  14.                             }   
  15.                 }   
  16.             }   
  17.         });  

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

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

请订阅本站 RSS feed 订阅到信箱 ,欢迎 Donate 或者 上面的广告内容 支持三十岁

本文链接:android如何给ListView添加动态加载数据

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:三十岁,谢谢!^^


分享到:          
  • 通告关闭
  • 评论 (2)
  1. 非常感谢分享,目前正在做这个,可以介绍下mStateHolder定义么?

    • 状态存储器,用来与线程交互

评论关闭