listView中多個item布局時ArrayIndexOutOfBoundsException異常

最近在寫ListView的多個item布局的時候產(chǎn)生了一個數(shù)組下標越界的異常,異常如下:

java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
    at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:6865)
    at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5220)
    at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3289)
    at android.widget.AbsListView.onTouchMove(AbsListView.java:3660)
    at android.widget.AbsListView.onTouchEvent(AbsListView.java:3499)
    at android.view.View.dispatchTouchEvent(View.java:7723)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2212)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2125)
    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1572)
    at android.app.Activity.dispatchTouchEvent(Activity.java:2535)
    at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:67)
    at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:67)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2073)
    at android.view.View.dispatchPointerEvent(View.java:7903)
    at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4257)
    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4136)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3638)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3688)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3657)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3764)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3665)
    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3821)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3638)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3688)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3657)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3665)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3638)
    at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5905)
    at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5885)
    at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5856)
    at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5994)
    at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
    at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
    at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
    at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5958)
    at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:6017)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:780)
    at android.view.Choreographer.doCallbacks(Choreographer.java:593)
    at android.view.Choreographer.doFrame(Choreographer.java:560)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:766)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5315)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:680)
    at dalvik.system.NativeStart.main(Native Method)

十分的莫名其妙线定,經(jīng)過各種百度谷歌以后發(fā)現(xiàn),發(fā)現(xiàn)原來是getViewTypeCount和getItemViewType的問題。
getItemViewType返回的是item的類型皮钠,為我們定義的類型常量,而getViewTypeCount返回的是類型的種類數(shù)量火的,需要注意的是壶愤,getViewTypeCount返回值一定要大于我們定義的類型常量值,很是不理解為啥馏鹤,不過確實解決了問題征椒。不再崩潰了。
原先我是這么寫的:

private static final int IS_END=1;
private static final int IS_NO_END=2;
private static final int IS_EQ=3;

@Overridepublic int getItemViewType(int position) {
    if (dates.isEmpty()){
        return 0;
    }
    FuceDate date=dates.get(position);
    int compare=DateUtil.getInstance(DateUtil.yyyy_MM_dd).compare(date.getMeasureDate(),
            DateUtil.getInstance(DateUtil.yyyy_MM_dd).getCurrentDate());
    return compare==-1?IS_END:compare==0?IS_EQ:IS_NO_END;
}
@Overridepublic int getViewTypeCount() {
    return 3;
}

這個么寫就崩潰了 因為有一個類型的常量值是和類型總數(shù)相同的湃累。必須要小于勃救。修改為:

private static final int IS_END=0;
private static final int IS_NO_END=1;
private static final int IS_EQ=2;

如此完事大吉。不過并不是很清楚為啥治力,感覺有點莫名其妙蒙秒。希望有路過的大神能留言解釋一下,萬分感謝宵统。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晕讲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子马澈,更是在濱河造成了極大的恐慌瓢省,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痊班,死亡現(xiàn)場離奇詭異勤婚,居然都是意外死亡,警方通過查閱死者的電腦和手機涤伐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門馒胆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人废亭,你說我怎么就攤上這事国章。” “怎么了豆村?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵液兽,是天一觀的道長。 經(jīng)常有香客問我掌动,道長四啰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任粗恢,我火速辦了婚禮柑晒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘眷射。我一直安慰自己匙赞,他們只是感情好佛掖,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涌庭,像睡著了一般芥被。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坐榆,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天拴魄,我揣著相機與錄音,去河邊找鬼席镀。 笑死匹中,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的豪诲。 我是一名探鬼主播顶捷,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼屎篱!你這毒婦竟也來了焊切?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤芳室,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刹勃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堪侯,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年荔仁,在試婚紗的時候發(fā)現(xiàn)自己被綠了伍宦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡乏梁,死狀恐怖次洼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遇骑,我是刑警寧澤卖毁,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站落萎,受9級特大地震影響亥啦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜练链,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一翔脱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧媒鼓,春花似錦届吁、人聲如沸错妖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暂氯。三九已至,卻和暖如春濒旦,著一層夾襖步出監(jiān)牢的瞬間株旷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工尔邓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晾剖,地道東北人。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓梯嗽,卻偏偏與公主長得像齿尽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子灯节,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容