【问题标题】:Adapter Class Cast Exception Removing Footer View from ListView [duplicate]适配器类转换异常从 ListView 中删除页脚视图 [重复]
【发布时间】:2012-10-04 00:08:04
【问题描述】:

可能重复:
Adapter class cast exception when removing a Footer view?

这是日志:

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() 中发生的所有事情

       if (myFooterView != null)
        {    
                   myListView.removeFooterView(myFooterView);  
        }

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    我们能否看到导致这种情况的代码而不仅仅是异常消息?如果我不得不猜测,我会说您正在调用类似于 ListView.getAdapter() 的内容并将返回的 ListAdapter 转换为您 ListView.setAdapter() 时使用的类型。

    这是一个常见的错误。但是,请务必记住,您设置的 ListAdapter 与返回给您的 ListView 不同,因为它在后台使用适配器来支持页眉和页脚。

    【讨论】:

    • 导致它的代码是 myListView.removeFooterView(myFooterView) 就是这样。
    • 我认为这是问题的一部分。当您要求 ListView 删除页脚时,它假定首先设置了页脚。如果设置了页脚,则 ListView 的内部适配器将是 HeaderViewListAdapter 类型,因此它将转换为 removeFooterView() 内部的适配器。但是,如果您没有设置页脚,则 ListView 将保留您的 MyAdapter 实例。因此,转换失败。
    • listView 计数为 1,所以里面有东西。
    • 当我不止一次添加页脚时,我会在里面得到几个副本。当我调用它时,列表计数为 1,我认为页脚在那里。
    • 值得一提的是,如果您要添加页脚或页眉视图,必须在调用setAdapter 之前完成,或者正如@zienkikk 所提到的,它不会是HeaderViewListAdapter,因此不支持页眉或页脚视图。
    猜你喜欢
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多