2015-02-05 53 views
2

我正在嘗試添加一個簡單的視圖作爲頁腳到ListView。 這樣做會引發ClassCastException。 (「cannot be cast to android.widget.HeaderViewListAdapter」)添加頁腳到ListView引發「不能轉換爲android.widget.HeaderViewListAdapter」

現在,在您將其標記爲無數個其他問題的副本之前,請繼續閱讀,您將明白爲什麼我要求幫助。

我瞭解在KitKat之前將頁眉或頁腳添加到ListView的必要步驟。所述procedure必須是:

  1. 添加報頭和/或頁腳。
  2. 然後設置適配器。

這是使得ListView.setAdapter可以確定適配器具有被包裹在一個HeaderViewListAdapter,基於是否存在任何頁眉或頁腳。 這很簡單易懂。

我的問題是,即使我按照這個程序,我得到異常拋出!

我在兩個不同的地方使用我的ListView。

  1. 標準活動,其中列表是唯一顯示的視圖。
  2. 片段的ViewPager

我遵循相同的程序在兩種情況下,首先添加頁眉/頁腳,然後設置在適配器內部。

Activity這工作正常,一切按預期工作。
Fragment中,我得到ClassCastException拋出。

下面是兩個實例的初始化代碼:

ActivityFragment

EndlessList list = (EndlessList) rootView.findViewById(R.id.EndlessListArea); 

// Adds the Loading and Error footer 
list.setupLoadingView(); 
list.setupErrorView(); 

// Sets up the Adapter for the list (View presentation and data management). 
list.setAdapter(new listAdapter()); 

我需要幫助搞清楚爲什麼用Activity的程序工作,但拋出一個異常,並Fragment


注:我甚至嘗試手動居然包裹適配器的HeaderViewListAdapter,然後將它傳遞給setAdapter方法,然後添加頁眉/頁腳。這擺脫了異常,但不會將頭/頁腳添加到我的Fragment中。代碼如下:

HeaderViewListAdapter adp = new HeaderViewListAdapter(null, null, adapter); 
super.setAdapter(adp); 

回答

1

我發現這個問題稍有作弊。
這個問題仍然是一個問題,它仍然沒有答案。

可以做什麼是在列表構建期間(在添加適配器之前)添加所需的頁眉或頁腳,然後在運行適配器之後運行刪除頁眉/頁腳視圖。
這確實會增加一些額外的工作,特別是如果頁眉或頁腳需要任何inflatinglayout management,但它確實解決了該問題。

如下代碼示例:

addHeaders(); 
addFooters(); 

public void setAdapter(ListAdapter adapter) 
{ 
    super.setAdapter(adapter); 

    // Fix for issues with ListView, Fragment and header/footer 
    hideAllHeaders(); 
    hideAllFooters(); 
} 
3

有可能是沒有足夠的代碼來回答這個問題,但你知道,如果你添加頁眉或頁腳列表,適配器自動被包裹在一個HeaderViewListAdapter?

this question答案:

((YourAdapter)((HeaderViewListAdapter)listView.getAdapter()).getWrappedAdapter()).notifyDataSetChanged(); 

如果你想添加頁眉或頁腳後訪問列表的適配器,此異常將拋出。

0

在將適配器設置爲列表視圖之前,將虛擬視圖添加爲頁眉或頁腳視圖。然後將適配器設置爲listview。這使listview實例成爲headerviewslist的實例。然後,您可以像平常一樣輕鬆地在列表視圖中添加和刪除頁腳。

相關問題