我正在尝试将一个简单的View作为页脚添加到ListView。
这样做会引发ClassCastException
。 ( “cannot be cast to android.widget.HeaderViewListAdapter
”)
在您将此标记为无数其他问题的副本之前,请继续阅读,您将理解为什么我会寻求帮助。
我理解在KitKat之前向ListView
添加页眉或页脚的必要步骤。 procedure必须是:
- 添加页眉和/或页脚。
- 然后设置适配器。
醇>
这样ListView.setAdapter
可以根据是否存在任何页眉或页脚来确定是否必须将适配器包装在HeaderViewListAdapter
中。
这很简单易懂。
我的问题是,即使我遵循这个程序,我也会抛出异常!
我在两个不同的地方使用我的ListView。
- 标准活动,其中列表是唯一显示的视图。
- ViewPager中的片段
醇>
我在两个实例中都遵循相同的步骤,首先添加页眉/页脚,然后设置适配器。
在Activity
中这很好用,一切都按预期工作
在Fragment
中,我收到了ClassCastException
。
以下是启动两个实例的代码:
Activity
和Fragment
:
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);
答案 0 :(得分:3)
可能没有足够的代码来回答这个问题,但是您是否知道如果向列表添加页眉或页脚,适配器会自动包装在HeaderViewListAdapter中?
请参阅this question中的答案:
((YourAdapter)((HeaderViewListAdapter)listView.getAdapter()).getWrappedAdapter()).notifyDataSetChanged();
如果在添加页眉或页脚后尝试访问列表的适配器,则会抛出此异常。
答案 1 :(得分:1)
我发现这个问题有轻微的欺骗方式 问题仍然是一个问题,但仍然没有答案。
可以做的是在列表构造期间(添加适配器之前)添加所需的页眉或页脚,然后在运行适配器后运行删除页眉/页脚视图。
这确实增加了一些额外的工作,特别是如果页眉或页脚需要任何inflating
或layout management
,但它确实解决了问题。
以下示例代码:
addHeaders();
addFooters();
public void setAdapter(ListAdapter adapter)
{
super.setAdapter(adapter);
// Fix for issues with ListView, Fragment and header/footer
hideAllHeaders();
hideAllFooters();
}
答案 2 :(得分:0)
在将适配器设置为listview之前,将虚拟视图添加为页眉或页脚视图。然后将适配器设置为listview。这使listview成为headerviewslist的实例。然后,您可以正常地从列表视图中轻松添加和删除页脚。