Android-ListView的removeFooterView方法報java.lang.ClassCastException錯誤

    在做ListView滾動到底部時自動加載下一頁數據時出現了錯誤,困擾了還挺久的,網上搜了不少資料,但是還是沒明白到底錯在哪裏。
今天又在處理這個問題的時候突然之間悟出來了。

先看下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。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章