ListView的动态刷新问题——用notifyDataSetChanged没作用
也许很多开发的朋友,尤其是Android初学者(笔者也是个初学者),在动态刷新ListView时,使用notifyDataSetChanged并没有起到作用。有时会被困扰得很痛苦。
其实,在使用notifyDataSetChanged过程中,还是有细节需要注意的。举个例子:
我的ListView使用的数据源是来自ArrayList。通常我们的做法是创建一个已经有我们想要提供给ListView的数据的ArrayList,例如:
ArrayList<Integer> list = new ArrayList<Interger>;
list.add(1);
这里我们的list已经是指向了一个堆内存上了。接着我们想要改变list中的数据,而这个时候,就需要注意了,举个例子:我们在代码中有另外一个ArrayList叫做newlist,它是使用下面代码创建出来的:
ArrayList<Integer> newlist = new ArrayList<Interger>;
list.add(2);
这个时候,newlist指向的是一个和list指向不同的堆内存,这个时候,我们直接用list = newlist来把newlist的数据交给list,在这里,实际上只是把list的指向改变了,让它也指向newlist指向的那个内存。那么这个时候我们再调用notifyDataSetChanged这个方法来通知listview更新数据就起不了任何作用了,原因很简单,就是list的指向已经改变,而调用notifyDataSetChanged会去检查原来list指向的数据是否变化,但是这时的list已经不是原来的list了,所以它无法判断,只能不作出响应了。那么,这个问题的解决方法是直接在原来的list上面更改数据,可以使用下面的代码来操作:
list.clear();
list.addAll(newlist);
adapter.notifyDataSetChanged();
这样,list的指向就不会改变,它还是指向原来那块内存,这样调用notifyDataSetChanged()就可以起作用了。
总结:在这里的重点就是要注意在开始时传给ListView的list指向不能被改变,需要从始至终指向同一个内存,这样调用notifyDataSetChanged后就能够检测到list的数据变化,从而触发ListView的重新绘制了!
原文:http://blog.csdn.net/wuzhipeng1991/article/details/38820647
ListView的动态刷新问题——用notifyDataSetChanged没作用的更多相关文章
- css中margin:0 auto没作用
很多初学制作网页的朋友,可能会遇到的一个常见问题,就是在CSS中加了margin:0 auto;却没有效果,不能居中的问题!margin:0 auto;的意思就是:上下边界为0,左右根据宽度自适应!其 ...
- ListView数据动态刷新
在Android开发中用到ListView时,经常遇到要更改ListView内容的情形,比如删除或增加ListView中显示的条目,这里给大家提供一下思路:不论ListView要显示的对象是什么(如: ...
- Android UI组件----自定义ListView实现动态刷新
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- ListView局部更新(非notifyDataSetChanged)
package com.example.test; import java.util.ArrayList; import java.util.List; import android.app.Acti ...
- Shiro的 rememberMe 功能使用指导(为什么rememberMe设置了没作用?)
UsernamePasswordToken token = new UsernamePasswordToken(loginForm.getUsername(),loginForm.getPasswor ...
- 我的Android进阶之旅------>ListView中android:cacheColorHint,android:listSelector属性作用 .
( 本文转载于:http://blog.csdn.net/stonecao/article/details/6216449) 自定义listview的时候,当你不使用android:cacheColo ...
- thinkPHP5.0中使用header跳转没作用
我在controller中的方法中这样写: header("Location:".$url); 但是一直没动静,不会跳转,最后还是官方文档解决了 https://www.kancl ...
- listview中OnItemClick方法各个参数的作用
OnItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) 1.arg0,arg2 m_listview.setOnI ...
- DisplayAttribute没作用,why?
namespace WebBulletinBoard.DataAccess { using System; using System.ComponentModel.DataAnnotations; u ...
随机推荐
- 【LeetCode】12. Integer to Roman 整型数转罗马数
题目: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from ...
- 设计模式——适配器模式(Adapter Pattern)
解决的问题: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作.比如说我的hp笔记本,美国产品,人家美国的电压是110V的,而我们中国 ...
- 学习记录 Java常见的几种字符集以及对 AscII的了解
1.ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte). ...
- SQL 实现,如果存在就更新,如果不存在就添加
alter proc proc_DataSummary as begin begin try begin tran --PV --统计的信息存入临时表 ), CreateDate, ) ), Crea ...
- 记录网上资源URL
FQ(使用路由器): http://kennylee26.iteye.com/blog/1887753 http://www.iteye.com/search?type=all&query=s ...
- SVN与TortoiseSVN实战:文件加锁详解
硬广:<SVN与TortoiseSVN实战>系列已经写了八篇,本篇是完结篇,整个系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解,以技巧性为主. 本篇详解使用Tortoi ...
- cacti快速安装
一.cacti概述 1. cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户. ...
- dell ipmi sol
http://blog.arnoudvermeer.nl/post/52375062605/howto-setup-ipmi-sol-on-a-dell-r-series-server http:// ...
- CSS 属性设置优先级问题
1.多个选择器可能会选择同一个元素,有3个规则,从上到下重要性降低: !important的用户样式 !important的作者样式 作者样式 用户样式 浏览器定义的样式 2. CSS规范为不同类型的 ...
- console.log在线调试
前端开发人员工作有时候会用到console.log,PC端直接能打开开发者工具.但是移动端就不太方便了,为此提供一种简单的方法,只需2步: 1.打开http://jsconsole.com/ 输入: ...