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)
和 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)
相关文章推荐
- AndroidStudio签名
- Android:Layout_weight属性解析
- Android中的ANR
- Android中的ANR
- Android中的ANR
- Android中的ANR
- Android中的ANR
- Android中的ANR
- Android中的ANR
- Android中的ANR
- Android中的ANR
- Android中的ANR
- 深入解析_Android的自定义布局
- android动画1-平移和旋转
- Android xml资源文件中@、@android:type、@*、?、@+含义和区别
- android 开源项目集合
- 第一次使用Android Studio时你应该知道的一切配置
- 关于Android Notification Bar icon setSmallIcon 显示为白板或白色的问题
- Android 休眠导致的问题Socket断开
- Android开发笔记(四)字符串格式化