Android ListView addScrapView ArrayIndexOutOfBoundsException

使用ListView自定义Adapter时出现ArrayIndexOutOfBoundsException错误:

1
2
3
4
5
6
java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:5996)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4554)
at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:3874)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)

CustomAdapter 的 getViewTypeCount() 方法返回值为2,表示ListView中有两种不同的视图,getItemViewType() 的返回值分别为1或2,取决于item在ListView中的位置。getItemViewType() 的返回值应该是从下标0开始的,所以应该返回0或者1。

解决办法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static final int COMMON_ITEM = 0;
static final int CLEAR_ITEM = 1;

@Override
public int getViewTypeCount() {
return 2;
}

@Override
public int getItemViewType(int position) {
if (position != historyKey.length) {
return COMMON_ITEM;
} else {
return CLEAR_ITEM;
}
}

将getItemViewType() 的返回值改为 0或者1,运行不报错了,问题解决啦!

最后总结一点是:Adapter的getViewTypeCount 方法和getItemViewType方法返回值之间存在一定的关系。如果getViewTypeCount 返回值为 3,那么getItemViewType方法的返回值应该是 0、1、2,不能超过2,否则会出现ArrayIndexOutOfBoundsException异常。

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :