zoukankan      html  css  js  c++  java
  • 【转】关于ListView中notifyDataSetChanged()刷新数据不更新原因

    使用Listview的时候: 当要动态显示更改后的数据(例如数据库改动), 很多人应该都用过notifyDataSetChanged();这个方法来刷新Listview,显示改后的数据. 

    这时候就要注意了: 
                     ...... 
                     private ArrayList<HashMap<String, Object>> usersList; 
                     ...... 
                     usersList= query(......);     //根据查询函数获取一个ArrayList并赋值给绑定到Adapter的数据源usersList 
                     sAdapter.notifyDataSetChanged(); 
                     ...... 

               如果你也是:   上面这种形式去刷新ListView的数据的话, 是不可以更新的. 必须改成如下形式: 

                     ...... 
                    //usersList= query(......);    
                     usersList.clear();  
                     usersList.addAll(query(......)); 
                     sAdapter.notifyDataSetChanged(); 

    /////////////////////////////////////////////////////////////////////////////////////// 

             原因是:    sAdapter会通过usersList获取List中的内容。但是实际上可能(也应该)是,在调用super(MyActivity.this, R.layout.item, usersList)时sAdapter保存了usersList指向原List(假设为List a)的引用,在调用query函数之后,usersList指向了一个新的List(List b)。但是在调用notifyDataSetChanged()时,sAdapter会跟据保存的引用(即指向List a的引用)去更新,因此当然还是原来的结果,不会进行更新。 


    如果大家也出现这种情况可以使用后者去刷新ListView, 应该就没问题了 

  • 相关阅读:
    IOS tableView的数据刷新
    IOS Modal(切换另外控件器方式)
    IOS UITabBarController(控制器)的子控制器
    iOS 应用数据存储的常用方式
    IOS 获取文本焦点 主动召唤出键盘(becomeFirstResponder) and 失去焦点(退下键盘)
    集合类型
    提取URL的搜索字符串中的参数
    本地对象、内置对象、宿主对象
    声明函数 执行上下文 匿名函数
    完善tab页面定位
  • 原文地址:https://www.cnblogs.com/crazydiver/p/4756921.html
Copyright © 2011-2022 走看看