您的位置:首页 > 移动开发 > Android开发

Error: cannot be cast to android.widget.HeaderViewListAdapter

2015-11-23 17:22 501 查看
在使用 ListView 的 headerView 和 footerView 的过程中,如果需要实现显示与隐藏的功能,一般都是直接使addFooterView
和 removeFooterView,在4.4上是可以实现的,但是今天发现在4.0.4上会crash。

出现Error:cannot be cast to android.widget.HeaderViewListAdapter

这是由于在 setAdapter 之后调用了addFooterView 和 removeFooterView 方法。

在Listview的源码中可以看到,如果设置了adapter,那么它会强转成HeaderViewListAdapter,所以就会报错。

if (mAdapter != null && ((HeaderViewListAdapter) mAdapter).removeHeader(v)) {
if (mDataSetObserver != null) {
mDataSetObserver.onChanged();
}
result = true;
}

所以你一定要在setAdapter之前调用addFooterView 或removeFooterView .

还有个方法就是直接设置

this.footerLayout.setVisibility(View.GONE);
但是你又会发现有问题,footerView 的内容虽然隐藏了,但是它仍然占有位置,就像设置View.INVISIBILE一样的效果。

网上大神给出了答案,只要给footerView再加上一个layout或者是父级的view就可以了。

RelativeLayout footerParent = new RelativeLayout(getContext());
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
rlp.addRule(RelativeLayout.CENTER_IN_PARENT);
footerParent.addView(footerLayout, rlp);
mListView.addFooterView(footerParent);
footerLayout.setVisibility(View.GONE);

这样就能实现效果了~~

(转载地址:http://blog.csdn.net/u010057266/article/details/49997985)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: