关于notifyDataSetChanged()
来源:互联网 发布:菲尔杰克逊 知乎 编辑:程序博客网 时间:2024/05/18 15:53
在一个碎片当中增加一个方法,用来通知ArrayAdapter对象adpater数据发生了改变
public class AssignFragmentAll extends Fragment{
//......
/**
* data changed */
public void notifyDataSetChanged(){
adapter.onDataSetChanged();
adapter.notifyDataSetChanged();
}
}
可以看到这里,先调用adpater里面的自定义方法,然后通知数据发生了改变。
这里的自定义方法的内容是什么呢?
它是这样定义的:
/**
* 更新adapter信息 */
public void onDataSetChanged(){
//添加新的项
generateDataset(true);
}
这里的generateDataset传入一个boolean参数,用于指示产生数据集合之前是否应该先
清除该集合内的全部数据
/**
* 产生数据集合
* @param clear */
public void generateDataset(boolean clear) {
if (clear) clear();
....
}
因为我们知道ArrayAdaper实际上是基于一个内部的ListView的,所以它包含了add() clear()等
方法,直接调用该方法即可。
但是这里我的数据集合并没有被清除。
经过短暂的查找之后才发现,数据被清除是在notifyDataSetChanged()之前调用的,所以
不会在界面上更新数据清除的结果。
又数据发生改变的相关的有两个方法,一个是
notifyDataSetChanged()
一个是
setNotifyOnChange(boolean notifyOnChange)
前面的方法要求每次更新、添加数据之后自己调用该方法通知adapter发生了变化,
后者只要传入boolearn为true,每次删除、增加数据之后会自动通知,即调用notifyDataSetChanged()
如果设置为false,则同样要自己调用notifyDataSetChanged()默认为true。
所以,每次添加、删除数据的时候就会自动调用notifyDataSetChanged()方法,根本无需添加该方法。
而ListView包含了一个Adaper也无法使用removeAllViews大方法,那么问题出在了哪里呢?
让我啼笑皆非的是,问题不在ListView和adaper当中,因为我在generateDataset时使用了一个
ArrayList来临时存储数据,每次清除的时候只调用了adaper的clear,忘记了调用它的clear方法了,因此每次修改都无效。
好了,一个Little Problem竟然耗费了那么长的时间来解决,不过,这个过程肯定是能够学习到一些东西的,
比如,上面的这些关于Adapaer的知识。也把该错误记录在这里,希望自己以后不要犯类似错误。
public class AssignFragmentAll extends Fragment{
//......
/**
* data changed */
public void notifyDataSetChanged(){
adapter.onDataSetChanged();
adapter.notifyDataSetChanged();
}
}
可以看到这里,先调用adpater里面的自定义方法,然后通知数据发生了改变。
这里的自定义方法的内容是什么呢?
它是这样定义的:
/**
* 更新adapter信息 */
public void onDataSetChanged(){
//添加新的项
generateDataset(true);
}
这里的generateDataset传入一个boolean参数,用于指示产生数据集合之前是否应该先
清除该集合内的全部数据
/**
* 产生数据集合
* @param clear */
public void generateDataset(boolean clear) {
if (clear) clear();
....
}
因为我们知道ArrayAdaper实际上是基于一个内部的ListView的,所以它包含了add() clear()等
方法,直接调用该方法即可。
但是这里我的数据集合并没有被清除。
经过短暂的查找之后才发现,数据被清除是在notifyDataSetChanged()之前调用的,所以
不会在界面上更新数据清除的结果。
又数据发生改变的相关的有两个方法,一个是
notifyDataSetChanged()
一个是
setNotifyOnChange(boolean notifyOnChange)
前面的方法要求每次更新、添加数据之后自己调用该方法通知adapter发生了变化,
后者只要传入boolearn为true,每次删除、增加数据之后会自动通知,即调用notifyDataSetChanged()
如果设置为false,则同样要自己调用notifyDataSetChanged()默认为true。
所以,每次添加、删除数据的时候就会自动调用notifyDataSetChanged()方法,根本无需添加该方法。
而ListView包含了一个Adaper也无法使用removeAllViews大方法,那么问题出在了哪里呢?
让我啼笑皆非的是,问题不在ListView和adaper当中,因为我在generateDataset时使用了一个
ArrayList来临时存储数据,每次清除的时候只调用了adaper的clear,忘记了调用它的clear方法了,因此每次修改都无效。
好了,一个Little Problem竟然耗费了那么长的时间来解决,不过,这个过程肯定是能够学习到一些东西的,
比如,上面的这些关于Adapaer的知识。也把该错误记录在这里,希望自己以后不要犯类似错误。
0 0
- 关于notifyDataSetChanged()
- 关于mAdapter.notifyDataSetChanged()无效问题
- notifyDataSetChanged
- notifyDataSetChanged
- notifyDataSetChanged
- notifyDataSetChanged
- notifyDataSetChanged
- notifyDataSetChanged()
- notifyDataSetChanged
- 关于listview的setAdapter和notifyDataSetChanged
- 关于Adapter的notifyDataSetChanged是否生效
- 关于listview的setAdapter和notifyDataSetChanged
- 关于调用 FragmentPagerAdapter.notifyDataSetChanged() 不能更新
- 关于BaseAdapter中notifyDataSetChanged 失效的问题
- 关于notifydatasetchanged后listview没有变化
- 关于adapter.notifyDataSetChanged无法更新的问题
- 关于Adapter的notifyDataSetChanged是否生效
- 关于adapter里面的notifyDataSetChanged()无效果
- Android 解析包出错问题
- Hibernate学习笔记之session缓存(一级缓存)
- MAC常用终端命令
- segmented control切换segment界面小技巧,小注意
- reading the path of picture
- 关于notifyDataSetChanged()
- 为何我工作十年,内心仍无比恐慌(腾讯产品总监曹菲)
- HTTP响应头信息和请求头信息详解
- OPENCV中经常会出现错误的地方
- Java中==、equals()、hashCode()区别
- -android常用多条件帅选菜单实现思路(类似美团,爱奇艺电影票下拉菜单)
- [算法]--八大排序算法
- jsp+servlet实现文件上传
- iOS 自定义抽屉式效果--ViewDeck(SlidingDrawer)实现与使用详解