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