java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called.
2016-10-17 13:54
411 查看
分析:android 4.2.X及以下的版本,addHeaderView必须在setAdapter之前,否则会抛出IllegalStateException。
android 4.2.X(API 17) ListView源码如下:
android 4.3.X(API 18)ListView源码如下:
所以为了兼容android4.2.x及以下的版本,最好先addHeaderView,后setAdapter.
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.
相关文章推荐
- java.lang.IllegalStateException:Cannot add header view to list==setAdapter has already been called.
- java.lang.IllegalStateException:Cannot add header view to list==setAdapter has already been called.
- java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been calle
- Cannot add header view to list -- setAdapter has already been called.
- Cannot add header view to list setAdapter has already been called
- Listview:Cannot add header view to list -- setAdapter has already been called
- Cannot add header view to list -- setAdapter has already been called
- ListView "Cannot add header view to list -- setAdapter has already been called."
- ListView添加HeaderView出现Cannot add header view to list -- setAdapter has already been called.
- addHeaderView()异常 —— setAdapter has already been called
- addHeaderView()异常 —— setAdapter has already been called
- addHeaderView()异常 —— setAdapter has already been called
- addHeaderView发生错误—— setAdapter has already been called.
- addHeaderView()异常 —— setAdapter has already been called
- 异常 java.lang.ClassCastException:cannot be cast to android.widget.HeaderViewListAdapter.的解决方法
- ParseResult Exception:java.lang.IllegalStateException: Cannot add header view to list -- setAdapter
- java.lang.ClassCastException: android.widget.HeaderViewListAdapter cannot be cast to com.android.mms
- ParseResult Exception:java.lang.IllegalStateException: Cannot add header view to list -- setAdapter
- 下载文件时报异常:java.lang.IllegalStateException: getOutputStream() has already been called for this respons
- java.lang.IllegalStateException: getWriter() has already been called for this response