zoukankan      html  css  js  c++  java
  • java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called.

    分析:android 4.2.X及以下的版本,addHeaderView必须在setAdapter之前,否则会抛出IllegalStateException。

    android 4.2.X(API 17) ListView源码如下:

    public void addHeaderView(View v, Object data, boolean isSelectable) {  
       
            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();  
            }  
    }  
    

      

    android 4.3.X(API 18)ListView源码如下:

        public void addHeaderView(View v, Object data, boolean isSelectable) {
            ......
    
            // Wrap the adapter if it wasn't already wrapped.
            if (mAdapter != null) {
                if (!(mAdapter instanceof 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();
                }
            }
        }
    

    所以为了兼容android4.2.x及以下的版本,最好先addHeaderView,后setAdapter.

  • 相关阅读:
    在现有项目中使用AspNet Identity 2.0 实战
    SQL 带自增长列的表的插入
    在C++中子类继承和调用父类的构造函数方法
    C++继承
    C++中重载、重写(覆盖)和隐藏的区别实例分析
    C++类
    C++中头文件(.h)和源文件(.cpp)都应该写些什么
    C++模板
    C语言字符串操作总结大全
    C++ 标准模板库(STL)
  • 原文地址:https://www.cnblogs.com/ryq2014/p/5969499.html
Copyright © 2011-2022 走看看