删除页脚视图时,适配器类转换exception?

我有一个例外,我从来没有想过我会看到。 从ListView(sic)中删除页脚视图时类的转换类适配器的exception。

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

这怎么可能发生? 什么是删除页脚与类转换exception?

该列表是一个多列表适配器,也许这就是为什么,但仍然是类除去页脚(sic)的exception。

Solutions Collecting From Web of "删除页脚视图时,适配器类转换exception?"

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

添加:

 public void addFooterView (View v) 

从以下版本开始:API级别1添加固定视图以显示在列表的底部。 如果不止一次调用addFooterView,视图将按照它们添加的顺序显示。 如果他们想要使用此调用添加的视图可以关注焦点。

注意:在调用setAdapter之前调用它。 这是ListView可以包装提供的光标与一个也将帐户页眉和页脚视图。

参数v要添加的视图。

资源

你也可以检查这个有趣的职位 。

希望这可以帮助。

这是上面的答案的一些代码,它在我的情况下工作:

我必须设置一个footerView(它是一个带有分页的listView中的加载视图)到我的列表视图,然后设置它的适配器,然后将其删除。 首先我从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); } } 

该问题不是来自removeFooterView() ,而是来自addFooterView() 。 如果你阅读文档,它会指出一个包装将被添加到你的适配器中:

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

因此,您必须使用getter来检索包装的适配器,并将其转换为适配器。 喜欢这个:

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

希望这会帮助你解决你的问题。

最好的祝福,

添加到其他答案,如果您添加/删除页脚dynamic(例如,如果他们到达列表的底部,然后您添加页脚视图)最简单的事情是重写ListView setAdapter ,并添加一个新的查看对象作为页脚,这将确保适配器被包装在HeaderViewListAdapter

 @Override public void setAdapter(ListAdapter adapter) { addFooterView(new View(getContext())); super.setAdapter(adapter); }