我有一个带有页脚的ListView(带有LinearLayoutTextView的简单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可能的唯一值是01

07-26 09:31