2015-10-28
2015-10-28 21:22
281 查看
在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,还会清空数据以及内部设置的“观察者”之类的,
相关文章推荐
- php设计模式 Adapter(适配器模式)
- ListView Adapter优化 实例
- Adapter实现ListView带多选框等状态的自定义控件的注意事项
- 自定义Adapter并通过布局泵LayoutInflater抓取layout模板编辑每一个item实现思路
- Android中的Adapter简单介绍
- ASP.NET的适配器设计模式(Adapter)应用详解
- ListView的Adapter使用(绑定数据) 之 自定义每一项的布局去绑定数据
- android开发中ListView与Adapter使用要点介绍
- Android自定义Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)
- ListView的Adapter使用 之 初学ArrayAdapter String
- Generic adapter class in Python
- Android AdapterView 源码分析以及其相关回收机制的分析
- 有关ListView的三种适配器类型
- 从应用框架角度看ListView与Adapter类别
- Android之Adapter用法总结
- 记录讲解Android Adapter的一篇文章
- Adapter之BaseAdapter使用
- Java设计模式 结构模式-适配器模式(Adapter)
- ListView 和 Adapter 的基础
- Android 之 adapter.notifyDataSetChanged() 无响应