ListView 页脚导致 ArrayIndexOutOfBoundsException
ListView Footer causes ArrayIndexOutOfBoundsException
我有一个带页脚的 ListView
(简单的 LinearLayout
带 TextView
和一个 ImageView
),还有一个 BaseAdapter
带 2 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()
的 returned 值索引,并且像每个数组一样,它是 0-based
。因此,您的 getItemViewType()
不能 return 大于或等于 getViewTypeCount()
的值。 getViewTypeCount() == 2
唯一可能的值是 0
和 1
我知道了!我有:
private static final int ITEM = 1;
private static final int STUB = 2;
而不是
private static final int ITEM = 0;
private static final int STUB = 1;
谢谢@Blackbelt,你的回答提醒我检查我的类型 "index" 值。
我有一个带页脚的 ListView
(简单的 LinearLayout
带 TextView
和一个 ImageView
),还有一个 BaseAdapter
带 2 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()
的 returned 值索引,并且像每个数组一样,它是 0-based
。因此,您的 getItemViewType()
不能 return 大于或等于 getViewTypeCount()
的值。 getViewTypeCount() == 2
唯一可能的值是 0
和 1
我知道了!我有:
private static final int ITEM = 1;
private static final int STUB = 2;
而不是
private static final int ITEM = 0;
private static final int STUB = 1;
谢谢@Blackbelt,你的回答提醒我检查我的类型 "index" 值。