Android 从ListView中删除页脚视图时发生适配器类强制转换异常
可能重复:Android 从ListView中删除页脚视图时发生适配器类强制转换异常,android,android-layout,Android,Android Layout,可能重复: 以下是日志: java.lang.ClassCastException: com.test.MyAdapter cannot be caste to android.widget.HeaderViewListAdapter at android.widget.ListView.removeFooterView(ListView.java:387) at com.test.MyActivity.removeFooterViews() MyAdapter是一个多列表适配器。我真的不
以下是日志:
java.lang.ClassCastException: com.test.MyAdapter cannot be caste to android.widget.HeaderViewListAdapter
at android.widget.ListView.removeFooterView(ListView.java:387)
at com.test.MyActivity.removeFooterViews()
MyAdapter是一个多列表适配器。我真的不明白删除页脚与将我的适配器转换为android.widget.HeaderViewListAdapter有什么关系?这是从哪里来的
以下是MyActivity.removeFooterViews()中发生的所有操作
我们能看到导致这种情况的代码而不仅仅是异常消息吗?如果我不得不猜测的话,我会说您是按照
ListView.getAdapter()
的思路调用了一些东西,并将返回的ListAdapter
转换为ListView.setAdapter()
时使用的类型
这是一个常见的错误。但是,重要的是要记住,您设置的
ListAdapter
与ListView
返回给您的不是同一个,因为它在引擎盖下使用适配器来支持页眉和页脚。导致它的代码是myListView。removeFooterView(myFooterView)就是它。我认为这是问题的一部分。当您要求ListView删除页脚时,它假定页脚是先设置的。如果设置了页脚,则ListView的内部适配器的类型将为HeaderServiceWListAdapter,因此它将强制转换到removeFooterView()中的类型。但是,如果尚未设置页脚,则ListView将保留MyAdapter实例。因此,转换失败。listView计数为1,因此其中有一些内容。当我多次添加页脚时,我会在其中获得多个副本。当我调用它时,列表计数为1,我认为页脚在那里。值得一提的是,如果要添加页脚或页眉视图,必须在调用setAdapter
之前完成,或者,正如@zienkick所提到的,它将不是HeaderViewListAdapter
,因此不支持页眉或页脚视图。
if (myFooterView != null)
{
myListView.removeFooterView(myFooterView);
}