为了实现listview展示多种类型的条目样式,往往需要重写getItemViewType这个方法,因此我们必须定义类型,比如这样:
private static final int ITEM_TYPE_NORMAL = 1;
private static final int ITEM_TYPE_TITLE_BAR = 2;
private static final int ITEM_TYPE_GROUP_BAR = 3;
这里我们定义了1,2,3三种类型表示不同的view。
然后重载getItemViewType
@Override
public int getItemViewType(int position) {
if (0 == position || 6 == position) {
return ITEM_TYPE_GROUP_BAR;
} else if (1 == position || 7 == position) {
return ITEM_TYPE_TITLE_BAR;
} else {
return ITEM_TYPE_NORMAL;
}
}
重载getViewTypeCount,我们定义了3种,返回3
@Override
public int getViewTypeCount() {
return 3;
}
经过多方搜索加上看getItemViewType的api,我们得知类型定义常量必须从0开始,而上面定义时从1开始的,导致出现崩溃问题,改成如下方式就对了:
private static final int ITEM_TYPE_NORMAL = 0;
private static final int ITEM_TYPE_TITLE_BAR = 1;
private static final int ITEM_TYPE_GROUP_BAR = 2;
程序运行成功。
sdk文档对getItemViewType的说明是这样子的:
type必须是0到getViewTypeCount() - 1的范围!!!
相关链接:http://stackoverflow.com/questions/2596547/arrayindexoutofboundsexception-with-custom-android-adapter-for-multiple-views-in