标签:
闲来无事,在写一个多样式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个元素,
然后:
没想到啊,这个居然是相关的;
而且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