症状:
@Override
public int getItemViewType(int pos) {
if (pos < friends.size())
return 1;
return 2;
}
@Override
public int getViewTypeCount() {
return 2;
}
adapter中这样重写getItemViewType和getViewTypeCount时,产生如下异常。
java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:6705)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5210)
at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:4368)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776)
at android.view.Choreographer.doCallbacks(Choreographer.java:579)
at android.view.Choreographer.doFrame(Choreographer.java:547)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5371)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
原因:
Note: Integers must be in the range 0 to getViewTypeCount() - 1
getItemViewType的返回值必须在0和getViewTypeCount() - 1范围之间。 –来自Android API文档。
解决办法:
@Override
public int getItemViewType(int pos) {
if (pos < friends.size())
return 0;
return 1;
}
@Override
public int getViewTypeCount() {
return 2;
}