BaseAdapter notifyDataSetChanged()
来源:互联网 发布:装修设计图制作软件 编辑:程序博客网 时间:2024/05/29 11:14
BaseAdapter 有一个方法:notifyDataSetChanged() 用途:在adapter的数据发生变化以后通知UI主线程根据新的数据重新画图。 从名字看,这个是一个notify,感觉就是发出通知了,但是通知什么时候被接受什么时候处理完成是不定的。 事实上其实也是这样的。 这个方法的实现: public void notifyDataSetChanged() { 再往下,会调用一个observer.onChanged(); 那么,mDataSetObservable是什么呢? 我理解是 public void registerDataSetObserver(DataSetObserver observer) { 设置进来的,这个应该是跟view相关的,比如说看GridView的setAdapter方法里面有: mDataSetObserver = new AdapterDataSetObserver(); AdapterDataSetObserver类里面有onChanged方法的实现 里面有调用一个requestLayout(); View的requestLayout()会调用mParent.requestLayout(); 跑到ViewRoot的 public void requestLayout() { scheduleTraversals的实现 public void scheduleTraversals() { 所以,其实notifyDataSetChanged是发送了一个message给主线程,告诉它,要重画了啊。 之所以看这个,其实跟之前bitmap recycle的时间点的问题是相关联的。 例如有一个grid view,它跟一个adapter捆绑,adapter用到的数据包括现实在grid每个item的bitmap,在数据刷新的之后,调用notifyDataSetChanged通知UI重画,那旧的bitmap要在什么时候recycle比较合适合理? 近来觉得message queue真的是很好用的东西,这里,recycle不要直接调用【直接调用的话,没有办法保证notifyDataSetChanged的通知什么时候被处理完,万一没处理完,recycle掉了图片,又想找图片画画面的时候就麻烦了】,而是在notifyDataSetChanged后面再丢message/runable到queue里面,让UI主线程recycle旧图片。这样就保证了只有UI上bitmap已经设置为新的了,旧的才会被recycle掉。
mDataSetObservable.notifyChanged();
}
mDataSetObservable.registerObserver(observer);
}
mAdapter.registerDataSetObserver(mDataSetObserver);
checkThread();
mLayoutRequested = true;
scheduleTraversals();
}
if (!mTraversalScheduled) {
mTraversalScheduled = true;
sendEmptyMessage(DO_TRAVERSAL);
}
}
- BaseAdapter notifyDataSetChanged()
- BaseAdapter notifyDataSetChanged()
- BaseAdapter notifyDataSetChanged()
- BaseAdapter notifyDataSetChanged()
- BaseAdapter 设置 notifyDataSetChanged 无效
- BaseAdapter的notifyDataSetChanged方法
- BaseAdapter 的notifyDataSetInvalidated 和notifyDataSetChanged
- BaseAdapter调用notifyDataSetChanged不刷新页面
- BaseAdapter.notifyDataSetChanged()和.Collections.copy(destination, sour)
- 关于BaseAdapter中notifyDataSetChanged 失效的问题
- Android BaseAdapter 更新数据 notifyDataSetInvalidated() notifyDataSetChanged()
- BaseAdapter导致notifyDataSetChanged()无效的四个原因及处理方法
- BaseAdapter导致notifyDataSetChanged()无效的四个原因及处理方法
- notifyDataSetChanged
- notifyDataSetChanged
- notifyDataSetChanged
- notifyDataSetChanged
- notifyDataSetChanged
- ActionScript是什么
- 机器学习的基本概念
- 2010年下半年11月份系统架构设计师上午试题以及参考答案之四
- 2010年下半年11月份系统架构设计师上午试题以及参考答案之五
- Muduo 网络编程示例之七:“串并转换”连接服务器及其自动化测试
- BaseAdapter notifyDataSetChanged()
- 枚举类型理解和作用
- 2010年下半年11月份系统架构设计师上午试题以及参考答案之六
- 2010年下半年11月份系统架构设计师上午试题以及参考答案之七
- Windows下安装2个Apache
- TCP基础应用
- android学习笔记(三)Toast
- xp下 下载chrome源码所遇到的问题!!!
- 研究生毕业前不要忘记去学习的一些---理论知识---很重要(不断补充)