关于调用notifyDataSetChanged刷新PullToRefreshListView列表无反应解决办法

2015-11-17 16:48 评论 0 条

摘要:

做新闻列表的时候,经常通过调用BaseAdapter中提供的notifyDataSetChanged方法来刷新列表,这个时候出现刷新列表后,ListView列表数据无变化的情况,出现这个结果的原因是给同一个List对象赋予了不同的引用,解决的办法是调用List中的add方法,将需要添加的数据再加入到List对象中,问题解决。
演示Demo

关键代码:

  1. //从后台获取到的数据,以实体形式存储到List中  
  2. private List<NewsMessageBean> entrysList = new ArrayList<NewsMessageBean>();  
  3. //默认获取第一页数据,下拉刷新获取第二页、第三页  
  4. private int page_id=1;  
  5.   
  6. private void getNewsMainListDataByThree(String categoryId, String rows,String offset, String direction) {  
  7.   
  8. NewsMainGetDataListAPI.getNewsListNearBy(categoryId, rows, offset,direction, new HttpResponseHandler(getActivity(), false) {  
  9.   
  10. @Override  
  11. public void doSuccess(boolean isSuccess, String json) {  
  12.   
  13. if (isSuccess) {  
  14.    /** 
  15.     * 加载第一页数据 
  16.     */  
  17.    if (page_id == 1) {  
  18.         entrysList = GsonUtil.jsonArray2List(json,NewsMessageBean.class);  
  19.   
  20.     if (entrysList.size() <= 0) {  
  21.         NothingListViewAdapter noAdapter = new NothingListViewAdapter(getActivity());  
  22.         FreshMansListView(noAdapter);  
  23.     }  
  24.   
  25.     new Thread() {  
  26.       @Override  
  27.       public void run() {  
  28.         Message message = new Message();  
  29.         message.what = REFRESH_NEWS_CONTENT;  
  30.         handler.sendMessage(message);  
  31.         }  
  32.      }.start();  
  33.      }  
  34.   
  35. /** 
  36.  * 如果下拉刷新了ListView列表,或者下拉加载了列表 
  37.  */  
  38. List<NewsMessageBean> entrysListNews = GsonUtil.jsonArray2List(json, NewsMessageBean.class);  
  39.   
  40.    if (entrysListNews.size() <= 0) {  
  41.     NothingListViewAdapter noAdapter = new NothingListViewAdapter(getActivity());  
  42.     FreshMansListView(noAdapter);  
  43.    }  
  44.   
  45. // 最关键的一步,如果你是这样写:entrysList=entrysListNews,列表数据不刷新,应该通过add方法,添加数据到同一个entrysList中  
  46.   
  47. Iterator<NewsMessageBean> iter = entrysListNews.iterator();  
  48.   
  49.        while (iter.hasNext()) {  
  50.         entrysList.add(iter.next());}  
  51.         }  
  52. }  
  53.   
  54. });  
  55.   
  56. }  

刷新列表代码:

  1. private void setNewsAdatpers() {  
  2.     if (null != adapter) {  
  3.         adapter.notifyDataSetChanged();  
  4.     } else {  
  5.         adapter = new HotNewsMainListAdapter(entrysList, getActivity());  
  6.         FreshMansListView(adapter);//这个方法添加适配器  
  7.     }  
  8. }  

分析:

在上面的List对象entrysList中,我们刷新ListView的时候,不是直接将新获取的entrysListNews直接赋值给entrysList,而是通过遍历entrysListNews后将每个NewsMessageBean添加到原来的entrysList对象中,这样在adapter调用notifyDataSetChanged方法,就可以刷新ListView列表数据。直接将entrysListNews直接赋值给entrysList后,演示demo如下图:
无刷新演示Demo

当前文章价值8.14元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://www.teachcourse.cn/792.html ,谢谢支持!

资源分享

Python库JWT实现token校验的示例 Python库JWT实现token校验的
Android Studio如何使用桌面版GitHub管理项目? Android Studio如何使用桌面版
Windows 10安装Rethinkdb配置启动服务 Windows 10安装Rethinkdb配置启
纠结怎么开启Windows图片阅览功能呢? 纠结怎么开启Windows图片阅览功

发表评论

呲牙 憨笑 坏笑 偷笑 色 微笑 抓狂 睡觉 酷 流汗 鼓掌 大哭 可怜 疑问 晕 惊讶 得意 尴尬 发怒 奋斗 衰 骷髅 啤酒 吃饭 礼物 强 弱 握手 OK NO 勾引 拳头 差劲 爱你

表情