码迷,mamicode.com
首页 > 移动开发 > 详细

Android ListView 多样式Item的一个注意点:(

时间:2015-10-24 06:40:46      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

闲来无事,在写一个多样式Item的ListView的Demo时,遇到了一个以前没遇过的问题;

╮( ̄▽ ̄")╭

 

我们知道,ListView里可以有多种样式的item,

实现只需要重写:

 1     @Override
 2     public int getItemViewType(int position) {
 3         int type = Integer.parseInt(mData.get(position).get(KEY_TYPE));
 4         switch (type) {
 5             case TYPE_HEADER:
 6                 return TYPE_HEADER;
 7 
 8             case TYPE_CONTENT:
 9                 return TYPE_CONTENT;
10         }
11         return super.getItemViewType(position);
12     }
13 
14     @Override
15     public int getViewTypeCount() {
16         return 2;
17     }

 

然后在getView()方法中做一些item的Type判断,做不同操作即可;

 

一切都那么美好;

 

---------------------------------------------------

 

然而,在我写这个Demo的时候发现,并不能随意给ItemViewType定义int值;

如:

1 public static final int TYPE_HEADER = 9;
2 public static final int TYPE_CONTENT = 1;

就会在随后的ListView使用时造成崩溃;

 

因为ListView会把不同的ItemViewType放进一个有序容器中,

而且这个容器的大小就是getViewTypeCount()方法返回的值,这里是2;

当复用TYPE_HEADER时,就会去取容器中的第9个元素,

然后:

java.lang.IndexOutOfBoundsException

没想到啊,这个居然是相关的;

而且Exception的printStackTrace()所显示的信息,都是sdk的类,简直难找问题源头;

 

---------------------------------------------------

 

所以,必须从0开始依次定义ItemViewType的值;

如:

1 public static final int TYPE_HEADER = 0;
2 public static final int TYPE_CONTENT_TEXT = 1;
3 public static final int TYPE_CONTENT_IMAGE = 2;
4 public static final int TYPE_FOOTER = 3;

 

(? _ ?)

Android ListView 多样式Item的一个注意点:(

标签:

原文地址:http://www.cnblogs.com/icer-chn/p/4906063.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!