我有一个带有页脚的ListView
(带有LinearLayout
和TextView
的简单ImageView
)和带有2个BaseAdapter
类型的View
:
@Override
public int getViewTypeCount() {
return 2;
}
我的问题是当我将列表滚动到底部并到达页脚时,因为抛出了此异常:
java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:6444)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4993)
at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:4197)
...
如果我将
getViewTypeCount()
增加到3,一切正常。这是我第一次遇到此错误,在其他项目中,我的BaseAdapters具有更多的ViewTypes和页脚和页眉,并且在没有“ increment hack”的情况下可以正常工作。
编辑:BaseAdapter代码:
@Override
public int getCount() {
return mItemsList.size();
}
@Override
public Object getItem(int position) {
return mItemsList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (mItemsList.get(position).getValue().equals(mContext.getString(R.string.stub))) {
return STUB;
}
return ITEM;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (getItemViewType(position) == ITEM) {
return itemView(position, convertView);
}
return stubView(convertView);
}
我在这里想念什么?
谢谢。
最佳答案
getViewTypeCount()
用于实例化convertView
的数组,并由getItemViewType()
的返回值索引,并且像每个数组一样,它是0-based
。因此,您的getItemViewType()
不能返回大于或等于getViewTypeCount()
的值。 getViewTypeCount() == 2
可能的唯一值是0
和1