Android ListView addHeaderView()的调用顺序
2017-01-01 00:55
561 查看
从api文档上看,4.4以下版本 addHeaderView()必须在setAdapter()之前调用,4.4以后的版本中,addHeaderView()可以在任何地方调用
/** * Add a fixed view to appear at the top of the list. If this method is * called more than once, the views will appear in the order they were * added. Views added using this call can take focus if they want. * <p> * Note: When first introduced, this method could only be called before * setting the adapter with {@link #setAdapter(ListAdapter)}. Starting with * {@link android.os.Build.VERSION_CODES#KITKAT}, this method may be * called at any time. If the ListView's adapter does not extend * {@link HeaderViewListAdapter}, it will be wrapped with a supporting * instance of {@link WrapperListAdapter}. * * @param v The view to add. * @param data Data to associate with this view * @param isSelectable whether the item is selectable */ public void addHeaderView(View v, Object data, boolean isSelectable) {...}
Note: When first introduced, this method could only be called before setting the adapter with {@link #setAdapter(ListAdapter)}.
4.4之前addHeader()代码
public void addHeaderView(View v, Object data, boolean isSelectable) { // 这里的一个判断,如果有Adapter直接抛异常 if (mAdapter != null && ! (mAdapter instanceof HeaderViewListAdapter)) { throw new IllegalStateException( "Cannot add header view to list -- setAdapter has already been called."); } FixedViewInfo info = new FixedViewInfo(); info.view = v; info.data = data; info.isSelectable = isSelectable; mHeaderViewInfos.add(info); // in the case of re-adding a header view, or adding one later on, // we need to notify the observer if (mAdapter != null && mDataSetObserver != null) { mDataSetObserver.onChanged(); } }
4.4之后的addHeader()
public void addHeaderView(View v, Object data, boolean isSelectable) { final FixedViewInfo info = new FixedViewInfo(); info.view = v; info.data = data; info.isSelectable = isSelectable; mHeaderViewInfos.add(info); mAreAllItemsSelectable &= isSelectable; // Wrap the adapter if it wasn't already wrapped. if (mAdapter != null) { if (!(mAdapter instanceof HeaderViewListAdapter)) { // adapter 都会转换成HeaderViewListAdapter mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, mAdapter); } // In the case of re-adding a header view, or adding one later on, // we need to notify the observer. if (mDataSetObserver != null) { mDataSetObserver.onChanged(); } } }
相关文章推荐
- 设计模式之-----单例模式
- android调用webservice发送header身份验证不成功
- android 自定义按钮控件
- Android常用单位px, dp, sp
- android tga文件读取
- Android Context应该如何写
- android 初学者
- Android for OpenCV 怎么旋转摄像头
- Android Studio使用ButterKnife绑定ImageButton程序卡死
- 你真的会用Android Studio么
- Android Studio中创建JAVA应用程序步骤
- android菜单menu
- Android View绘制过程
- android studio导入slidingmenu库出错的一种原因
- Android6.0动态权限分析
- android studio 插件推荐和android开发效率工具推荐
- 【Android图像处理】图像处理之-R&B
- 【Android图像处理】图像处理之-哈哈镜
- Android设备读写NFC标签
- android_AutoCompleteTextView