今天又在處理這個問題的時候突然之間悟出來了。
先看下ListView的setAdapter方法裏的部分代碼:
public void setAdapter(ListAdapter adapter) {
............
if (mHeaderViewInfos.size() > 0|| mFooterViewInfos.size() > 0) {
mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, adapter);
} else {
mAdapter = adapter;
}
............
}
看出點什麼沒,代碼的大致意思是如果ListView沒有headerView或者footerView的時候,與listView相關聯的Adapter就是傳進來的參數Adapter,如果有,就將原來的Adapter包裝成HeaderViewListAdapter。
至此大致明白了自己錯在哪裏了,因爲一開始第一頁的時候用不到footerView,所以一開始創建的Adapter並不是HeaderViewListAdapter,然後在加載下一頁的時候有添加和刪除footerView的操作,但是當前的Adapter並不是HeaderViewListAdapter,導致錯誤發生,報了java.lang.ClassCastException錯誤。
明白了錯誤,也就有了相應的解決方案了。在setAdapter執行前如果之後需要headerView或者footerView的,可以先add到ListView裏,如果不需要一開始的時候顯示,可以在setAdapter後立刻remove掉就好了,這樣子處理主要是爲了讓創建的是Adapter是HeaderViewListAdapter。