2015-10-28
来源:互联网 发布:ubuntu编译用什么版本 编辑:程序博客网 时间:2024/06/05 02:55
在Adapter 数据的更新
一般来说用notifyDataSetChanged()方法通知适配器数据发生变化,更新view,后来发现另一个真正的 “更新”方法:
public void setAdapter(ListAdapter adapter) { //清空之前绑定的mDataSetObserver对象 if (mAdapter != null && mDataSetObserver != null) { mAdapter.unregisterDataSetObserver(mDataSetObserver); } //清空之前的一切数据,初始化一些必要的参数 resetList(); mRecycler.clear(); //重置adapter mAdapter = adapter; //初始化上次选中item的位置 mOldSelectedPosition = INVALID_POSITION; //初始化上次选中行的位置,即:当初选中的行的索引 mOldSelectedRowId = INVALID_ROW_ID; // AbsListView#setAdapter will update choice mode states. super.setAdapter(adapter); if (mAdapter != null) { //记录之前girdView里面item的数目 mOldItemCount = mItemCount; //当前girdView里面item的数据 mItemCount = mAdapter.getCount(); //数据已经变化 mDataChanged = true; //检测焦点 checkFocus(); //注册观察者 mDataSetObserver = new AdapterDataSetObserver(); mAdapter.registerDataSetObserver(mDataSetObserver); mRecycler.setViewTypeCount(mAdapter.getViewTypeCount()); int position; //判断是否从最后来查找Selectable的的位置 //lookForSelectablePosition从方法实现上来看是第二个参数是没有用到的 if (mStackFromBottom) { position = lookForSelectablePosition(mItemCount - 1, false); } else { position = lookForSelectablePosition(0, true); } //选中第几个,记录了行和当前girdview的id setSelectedPositionInt(position); //选中下一个 setNextSelectedPositionInt(position); //检测是否选中的位置改变 checkSelectionChanged(); } else { checkFocus(); // Nothing selected checkSelectionChanged(); } //充值布局 requestLayout(); }
如上所示就是setAdapter()方法,此方法不仅会清空以创建的itemView,还会清空数据以及内部设置的“观察者”之类的,
0 0
- 2015-10-28
- 2015-10-28基础知识
- 琐事记 - 2015/10/28
- 2015 10 28  函数
- 2015/10/28 ios ffmpeg移植
- 2015 10 28 多维数组 和字符串
- 2015年10月28日
- 2015年10月28日
- 2015年10月28日
- 10-28
- 10 28
- 10-28
- 3/28/2015
- 2015-05-28
- 拾遗2015-07-28
- 2015-07-28总结
- [2015-07-28] python010
- 2015/07/28
- LintCode_不同的路径
- Oracle函数之非常实用的统计查询
- 自定义View实现支付宝芝麻信用页面功能
- Mybatis基本配置和搭建
- 蓝懿iOS 技术内容和心得 10。28技术内容交流和心得分享
- 2015-10-28
- 显式调用构造函数和析构函数
- Hadoop2.x下安装HBase
- 私有构造函数
- 用ajax判断帐号是否存在(附例子)
- SpringMVC-初识SpringMVC
- 动态规划
- [c语言] 调用函数实现求两个数中的最大值
- 79Word Search