用listview设置header或footerview,通常发生该异常。
如果你没有发生,那是碰巧。但是你可能不知道原因。
如果在listview.setAdapter(adapter)方法之后 添加头或尾view,
即addHeaderView或 addFooterView,
那么在你listView.removeHearderView或removeFooterView时就会报该异常。
在Listview的源码中如果设置了adapter,那么它会强转成HeaderViewListAdapter,所以就会报错。
if (mAdapter != null && ((HeaderViewListAdapter) mAdapter).removeHeader(v)) { if (mDataSetObserver != null) { mDataSetObserver.onChanged(); } result = true; }
解决方案:
1、
在setAdapter之前调用addHeaderView或addFooterVeiw
2、
CommentAdapter adapter = null; if(lv_comment.getAdapter() instanceof HeaderViewListAdapter){ HeaderViewListAdapter listAdapter = (HeaderViewListAdapter) lv_comment.getAdapter(); adapter = (CommentAdapter) listAdapter.getWrappedAdapter(); }else{ adapter = (CommentAdapter) lv_comment.getAdapter(); }