ListView addHeaderView和addFooterView使用上的一些问题

ListView addHeaderView和addFooterView使用上的一些问题

剧情是这样的:

 1 public class SomeViewGroup extends FrameLayout {
 2 
 3         ...
 4 
 5     public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {
 6 
 7         mOnLoadMoreListener = onLoadMoreListener;
 8 
 9         LayoutInflater mInflater = (LayoutInflater) getContext()
10                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
11         loadMoreLayout = (ViewGroup) mInflater.inflate(
12                 R.layout.list_load_more_layout, this);
13         loadMoreLayout.setOnClickListener(loadMoreClickListener);
14         loadMoreText = (TextView) loadMoreLayout
15                 .findViewById(R.id.load_more_textview);
16         moreProgressBar = (ProgressBar) loadMoreLayout
17                 .findViewById(R.id.load_more_progressbar);
18         loadMoreText.setVisibility(View.GONE);
19         mainList.addFooterView(loadMoreLayout);
20 
21     }
22 
23         ...
24 
25 }        

关键在红色的那几行,这个view在使用时会发生异常,

java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams

下面来分析下原因和解决方法。

在ListView源码里可以看到:

 1     void resetList() {
 2         // The parent's resetList() will remove all views from the layout so we need to
 3         // cleanup the state of our footers and headers
 4         clearRecycledState(mHeaderViewInfos);
 5         clearRecycledState(mFooterViewInfos);
 6 
 7         super.resetList();
 8 
 9         mLayoutMode = LAYOUT_NORMAL;
10     }
11 
12     private void clearRecycledState(ArrayList<FixedViewInfo> infos) {
13         if (infos != null) {
14             final int count = infos.size();
15 
16             for (int i = 0; i < count; i++) {
17                 final View child = infos.get(i).view;
18                 final LayoutParams p = (LayoutParams) child.getLayoutParams();
19                 if (p != null) {
20                     p.recycledHeaderFooter = false;
21                 }
22             }
23         }
24     }

错误就是在第18行抛出的,这里的 mFooterViewInfos 实际上就是我们添加的Footer view的一个列表。代码里循环处理每个footer view,而在getLayoutParams()时,ListView要求必须是AbsListView的LayoutParams,而在我们自己的代码中:loadMoreLayout = (ViewGroup) mInflater.inflate(R.layout.list_load_more_layout, this),这里的this是FrameLayout,所以才抛出ClassCastException异常的。

解决方法很简单,把我们自己代码中的12行的this改成null就OK了:D

还有一点要注意,addFooterView()一定要在setAdapter()之前调用,否则,虽然不会像addHeaderView()那样抛出异常,但是会导致footer view无法显示。

转载于:https://www.cnblogs.com/coding-way/archive/2013/05/17/3083351.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110129.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 最优控制——变分法

    最优控制——变分法第一章最优控制基础1、一般的最优化问题要最小化的性能指标定义在数域上,而变分问题的性能指标(目标泛函)的定义域是函数的集合。2、泛函:从任意定义域到实数域或复数域的映射。泛函的定义域是函数集,

    2022年8月4日
    11
  • android之ArrayAdapter的重写

    昨天介绍了ArrayAdapter的使用,今天介绍一下更加实用的一点,对它进行重写,满足自己的个性化设计需要.ArrayAdapter(数组适配器)一般用于显示一行文本信息,所以比较容易。public ArrayAdapter(Context context,int textViewResourceId, List objects)上面的这行代码来装配数据,要装配这些数据就需要一个连接

    2022年3月10日
    82
  • wannacry病毒作者_wannacry病毒利用了哪种漏洞

    wannacry病毒作者_wannacry病毒利用了哪种漏洞1.样本概况1.1样本信息病毒名称:Trojan-Ransom.Win32.Wanna.m所属家族:木马/勒索/蠕虫MD5:DB349B97C37D22F5EA1D1841E3C89EB4SHA1:E889544AFF85FFAF8B0D0DA705105DEE7C97FE26CRC32:9FBB12271.2测试环境及工具…

    2022年10月9日
    0
  • html语言代码超链接,html 超链接 word html超链接代码

    html语言代码超链接,html 超链接 word html超链接代码【网页用word打开】可以直接打开word文件的超链接在网页中,怎么样…“打开/保存”是因浏览者的浏览器而异的,假如浏览者的电脑没有装word软件,那么,无论什么情况,都是打不开的,你只能选择保存(选择打开的话,电脑会让你选择使用什么软件来打开);如果浏览者的电脑装了word软件,那么如果电脑的安全级别高一些,一样会提示“打开/保存”,为的是防止直接打开病毒文件。要达到你要的效果,基本不可能,…

    2022年7月12日
    10
  • Spring Cloud入门-Eureka服务注册与发现(Hoxton版本)

    Spring Cloud入门-Eureka服务注册与发现(Hoxton版本)文章目录什么是SpringCloud摘要Eureka简介搭建Eureka注册中心创建父工程springcloud-learning创建Eureka服务端模块使用IDEA的RunDashboard来运行SpringCloud应用搭建Eureka客户端搭建Eureka注册中心集群搭建两个注册中心运行Eureka注册中心集群给Eureka注册中心添加认证创建一个eureka-security-ser…

    2022年8月21日
    3
  • 深入解析FastClick解决延迟点击

    深入解析FastClick解决延迟点击下载源码和文档gitHub上都有,有兴趣的可以去逛逛https://github.com/ftlabs/fastclick使用

关注全栈程序员社区公众号