`
1028826685
  • 浏览: 938397 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类

关于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, 应该就没问题了


分享到:
评论
1 楼 mfkxk298 2016-06-29  
简单明了的例子,解决了问题,谢谢啦!

相关推荐

    Listview不用notifydatasetchanged更新数据的方法

    Listview不用notifydatasetchanged更新数据的方法

    Android——Listview不用notifydatasetchanged更新数据的方法

    blog: http://blog.csdn.net/u013293125/article/details/52858396 http://www.cnblogs.com/ityizhainan/p/5976845.html

    Android中ListView动态刷新

    总结,`notifyDataSetChanged()`是Android中更新ListView数据的关键方法,它使得开发者能够在程序运行时轻松地实现列表数据的动态刷新,提供了丰富的用户体验。但同时也需要注意性能优化,合理使用,以避免对应用...

    ListView的下拉刷新和上拉加载数据

    当用户在ListView顶部下拉时,这个布局会显示一个动画,表示正在刷新数据。在实现过程中,开发者需要监听SwipeRefreshLayout的刷新事件,并在回调中执行更新数据的操作,如重新加载网络数据或者从数据库读取最新数据...

    ListView 顶部松开刷新数据

    当需要刷新数据时,Adapter需要更新其数据集,并调用`notifyDataSetChanged()`通知ListView数据已改变。 7. **异步加载数据**:由于刷新操作通常涉及到网络请求,因此应在子线程(例如使用AsyncTask)中进行,以...

    ListView实现下拉上拉刷新数据

    本教程将详细介绍如何在Android中利用ListView实现下拉上拉刷新数据的功能。 首先,我们需要了解下拉刷新和上拉加载的概念。下拉刷新通常用于用户滑动到列表顶部时,通过手势触发更新数据的操作;上拉加载则是在...

    自定义ListView实现下拉刷新+加载更多功能Demo

    首先,下拉刷新功能(Pull-to-Refresh)让用户可以通过在ListView顶部向下拉动来刷新数据。这种功能常见于新闻应用、社交网络等,以获取最新的信息。实现这一功能通常涉及以下步骤: 1. **引入库**:许多第三方库如...

    android开发的listview下拉刷新加载数据

    在提供的资源中,可能包含了一个名为"CustomListView"的自定义ListView示例,它可能包含了下拉刷新和加载更多的实现代码,以及"20130722102740.jpg"可能是一个关于ListView使用示例的截图。 综上所述,理解并实现...

    浅谈Android中适配器的notifyDataSetChanged()为何有时不刷新

    总结起来,`notifyDataSetChanged()`不刷新问题通常源于数据源与Adapter数据的同步问题。在数据变更后,必须确保Adapter内部的数据引用也相应更新,这样才能正确触发ListView的刷新。同时,确保`getView()`方法能...

    ListView列表更新数据

    本教程将详细讲解如何在ListView中更新数据并利用`notifyDataSetChanged()`方法来刷新列表视图。 首先,我们需要创建一个ListView的基本结构。在布局文件(如activity_main.xml)中,我们需要添加一个ListView控件...

    Android应用源码 ListView下拉刷新 Demo

    ListView下拉刷新功能是现代移动应用中的一个常见特性,允许用户通过下拉列表来获取最新的数据,如社交媒体的新消息或天气更新。这个"Android应用源码 ListView下拉刷新 Demo"提供了一个实际的例子,帮助开发者了解...

    ListView动态加载刷新

    将ListView作为SwipeRefreshLayout的子视图,设置相应的回调,当用户下拉时,触发刷新数据的操作。同样,数据刷新后更新Adapter并通知ListView。 5. **优化性能**:对于大数据量的ListView,为了提高性能,需要使用...

    Listview实现刷新和更新一条或多条数据

    本示例主要探讨如何在ListView中实现数据的刷新和更新,包括单条数据的更新以及多条数据的添加。以下是一些核心知识点: 1. **适配器(Adapter)**:ListView的核心是适配器,它负责将数据绑定到ListView的各个视图...

    Listview自动下拉刷新,自动滑动加载更多数据列表

    下拉刷新功能让用户在ListView顶部向下拉动时触发刷新操作,通常用于更新列表中的数据。这一特性在移动应用中非常常见,特别是那些实时性要求较高的应用,如新闻、邮件或社交媒体应用。实现下拉刷新功能,开发者可以...

    listview上拉刷新

    4. 在回调函数中,异步加载新的数据,加载完毕后更新Adapter的数据集,通常需要调用notifyDataSetChanged()通知UI更新。 5. 如果使用了SwipeRefreshLayout,还需要处理下拉刷新的逻辑,确保在刷新过程中不再触发上拉...

    listview局部刷新Demo

    在`getView()`中,我们首先检查传入的convertView是否为空,如果不为空,我们可以直接使用它,更新其显示的数据,避免了重复创建View。 4. **局部刷新优化**:为了实现局部刷新,我们需要在`getView()`中判断当前...

    android中ListView下拉刷新

    在`onRefresh()`方法中,开发者需要执行刷新数据的操作,例如从网络或数据库加载新数据。 3. **自定义头部布局**:虽然SwipeRefreshLayout内置了一个默认的刷新动画,但有时候开发者可能需要自定义更符合应用风格的...

    ListView添加数据后动态刷新Demo

    本示例"ListView添加数据后动态刷新Demo"将向我们展示如何在ListView中动态加载和更新数据。动态刷新意味着当数据发生变化时,ListView能够实时反映出这些变化,而无需重新加载整个列表。 首先,我们来理解ListView...

    ListView中使用自定义Adapter及时更新数据

    在实际应用中,我们往往需要根据业务需求实时地更新ListView中的数据。本篇将详细讲解如何在ListView中使用自定义Adapter来实现数据的及时更新。 首先,我们需要理解ListView的工作原理。ListView通过Adapter来与...

    ListView下拉刷新获取数据库数据

    `ListView下拉刷新获取数据库数据`这个主题涉及到了ListView的交互更新以及如何从数据库中动态加载数据。在这个场景中,用户通过下拉ListView的动作触发刷新操作,系统则从数据库中获取新的数据并更新到ListView上,...

Global site tag (gtag.js) - Google Analytics