将页脚添加到ListView时抛出;无法强制转换为android.widget.HeaderServiceWlistAdapter“;

将页脚添加到ListView时抛出;无法强制转换为android.widget.HeaderServiceWlistAdapter“;,android,listview,exception,Android,Listview,Exception,我正在尝试将一个简单视图作为页脚添加到ListView。 这样做会抛出一个ClassCastException。(“无法强制转换为android.widget.HeaderViewListAdapter”) 现在,在你将此标记为无数其他问题的副本之前,请继续阅读,你将理解我为什么寻求帮助 我了解在KitKat之前向列表视图添加页眉或页脚的必要步骤。必须: 添加了页眉和/或页脚 然后设置适配器 这使得ListView.setAdapter可以根据是否存在任何页眉或页脚,确定是否必须将适配器包装在H

我正在尝试将一个简单视图作为页脚添加到ListView。 这样做会抛出一个
ClassCastException
。(“
无法强制转换为android.widget.HeaderViewListAdapter
”)

现在,在你将此标记为无数其他问题的副本之前,请继续阅读,你将理解我为什么寻求帮助

我了解在KitKat之前向
列表视图添加页眉或页脚的必要步骤。必须:

  • 添加了页眉和/或页脚
  • 然后设置适配器
  • 这使得
    ListView.setAdapter
    可以根据是否存在任何页眉或页脚,确定是否必须将适配器包装在
    HeaderViewListAdapter
    中。 这是简单易懂的

    我的问题是,即使我遵循这个过程,也会抛出异常

    我在两个不同的地方使用ListView

  • 标准活动,其中列表是唯一显示的视图
  • ViewPager中的片段
  • 我在两个实例中都遵循相同的过程,首先添加页眉/页脚,然后设置适配器

    活动中
    这一切正常,一切正常。
    片段
    中,我抛出了一个
    ClassCastException

    以下是两个实例的启动代码:

    活动
    片段

    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());
    
    我需要帮助,弄清楚为什么该过程与
    活动一起工作,但引发了
    片段的异常
    


    注意:我甚至尝试在
    HeaderViewListAdapter
    中手动包装适配器,然后将其传递给
    setAdapter
    方法,然后添加页眉/页脚。这将消除异常,但不会向我的片段添加页眉/页脚。代码如下:

    HeaderViewListAdapter adp = new HeaderViewListAdapter(null, null, adapter);
    super.setAdapter(adp);
    
    addHeaders();
    addFooters();
    
    public void setAdapter(ListAdapter adapter)
    {
        super.setAdapter(adapter);
    
        // Fix for issues with ListView, Fragment and header/footer
        hideAllHeaders();
        hideAllFooters();
    }
    

    我在这个问题上发现了一种轻微的欺骗方式。
    这个问题仍然是个问题,仍然没有答案

    可以做的是在列表构造期间(添加适配器之前)添加所需的任何页眉或页脚,然后在运行适配器后运行remove header/footer view。
    这确实增加了一些额外的工作,特别是如果页眉或页脚需要任何
    膨胀
    布局管理
    ,但它确实解决了这个问题。

    示例代码如下:

    HeaderViewListAdapter adp = new HeaderViewListAdapter(null, null, adapter);
    super.setAdapter(adp);
    
    addHeaders();
    addFooters();
    
    public void setAdapter(ListAdapter adapter)
    {
        super.setAdapter(adapter);
    
        // Fix for issues with ListView, Fragment and header/footer
        hideAllHeaders();
        hideAllFooters();
    }
    

    可能没有足够的代码来回答这个问题,但是您是否知道,如果向列表添加页眉或页脚,适配器会自动包装在HeadServiceWListAdapter中

    请参见中的答案:


    如果在添加页眉或页脚后试图访问列表的适配器,则会引发此异常。

    在将适配器设置为listview之前,请将虚拟视图添加为页眉或页脚视图。然后将适配器设置为listview。这使listview成为HeaderViewList的实例。然后,您可以像往常一样从listview中轻松添加和删除页脚