删除页脚视图时适配器类强制转换异常?

时间:2012-09-29 02:26:30

标签: android

我有一个例外,我从未想过会看到。从ListView(原文如此)中删除页脚视图时适配器的类强制转换异常。

 java.lang.ClassCastException: com.test.MyAdapter
 at android.widget.ListView.removeFooterView(ListView.java:381)

这怎么可能发生?删除页脚与类强制转换异常有什么关系????

该列表是一个多列表适配器,也许这就是为什么但仍然是一个用于删除页脚(sic)的类强制转换异常。

3 个答案:

答案 0 :(得分:12)

在调用ListView方法之前,将页脚视图添加到setAdapter()

<强>加了:

public void addFooterView (View v)

自:API级别1 添加固定视图以显示在列表的底部。 如果多次调用addFooterView,则视图将按添加顺序显示。使用此调用添加的视图可以在需要时获得焦点。

注意:在调用setAdapter之前调用它。这样,ListView可以将提供的光标包装起来,也可以考虑页眉和页脚视图。

参数 v要添加的视图。

Source

您也可以查看interesting post

希望这有帮助。

答案 1 :(得分:9)

这是上面答案的一些代码,它适用于我的情况:

在设置它的适配器之前,我必须在我的listView中设置一个footerView(它是一个带有分页的listView中的loadingView),然后将其删除。首先,我在OnCreate方法的布局文件中初始化了我的loadingView:

LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
loadingView = layoutInflater.inflate(R.layout.loading_view, null);

然后我在同一方法中使用了这种解决方法:

this.setIsLoading(true);
listView.setAdapter(adapter);
this.setIsLoading(false);

其中

private void setIsLoading(boolean isLoading)
{
    this.isLoading = isLoading;

    if (isLoading) {
        listView.addFooterView(loadingView);
    }
    else {
        listView.removeFooterView(loadingView);
    }
}

答案 2 :(得分:1)

问题不是来自removeFooterView(),而是来自addFooterView()。 如果您阅读文档,它会声明包装器将添加到您的适配器:

如果ListView的适配器没有扩展HeaderViewListAdapter,它将被WrapperListAdapter的支持实例包装。

因此,您必须使用getter检索包装的适配器并将其强制转换为适配器。像这样:

((MyAdapter) ((HeaderViewListAdapter) listView.getAdapter()).getWrappedAdapter())

希望这可以帮助您解决问题。

致以最诚挚的问候,