android ListView出现Caused by: java.lang.IllegalStateException: Cannot add header view to list -- setA...

it2022-05-06  3

在android4.2及以前 必须先设置 

addHeaderView和addFooterView

  然后设置 

setAdapter

 

在4.3以上 就没问题:

源码 4.2

public void More ...addHeaderView(View v) { addHeaderView(v, null, true); } 会先判断adapter是否为空 public void More ...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(); } }

  在4.2以上

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)) { wrapHeaderListAdapterInternal(); } // 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(); } } }

  已经处理了

所以 为了兼容低版本:

先添加headr和footer然后再去设置adapter.

转载于:https://www.cnblogs.com/yaya25001/p/7210176.html


最新回复(0)