adapter 中多个布局数组下标越界
崩溃日志如下:
# main(1)
java.lang.ArrayIndexOutOfBoundsException
length=2; index=2
解析
原始
1
android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:6842)
| |
2
android.widget.ListView.layoutChildren(ListView.java:1647)
| |
3
android.widget.AbsListView.onLayout(AbsListView.java:2168)
| |
4
android.view.View.layout(View.java:16754)
| |
5
android.view.ViewGroup.layout(ViewGroup.java:5462)
| |
6
android.widget.FrameLayout.layoutChildren(FrameLayout.java:338)
| |
7
android.widget.FrameLayout.onLayout(FrameLayout.java:273)
| |
8
android.view.View.layout(View.java:16754)
| |
9
android.view.ViewGroup.layout(ViewGroup.java:5462)
| |
10
android.widget.LinearLayout.setChildFrame(LinearLayout.java:1764)
| |
11
android.widget.LinearLayout.layoutVertical(LinearLayout.java:1607)
| |
12
android.widget.LinearLayout.onLayout(LinearLayout.java:1516)
| |
13
android.view.View.layout(View.java:16754)
| |
14
android.view.ViewGroup.layout(ViewGroup.java:5462)
| |
15
android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
| |
16
android.view.View.layout(View.java:16754)
| |
17
android.view.ViewGroup.layout(ViewGroup.java:5462)
| |
18
android.support.v4.view.ViewPager.onLayout(ViewPager.java:1795)
| |
19
android.view.View.layout(View.java:16754)
| |
20
android.view.ViewGroup.layout(ViewGroup.java:5462)
| |
21
android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
| |
22
android.view.View.layout(View.java:16754)
| |
23
android.view.ViewGroup.layout(ViewGroup.java:5462)
| |
24
android.widget.FrameLayout.layoutChildren(FrameLayout.java:338)
| |
25
android.widget.FrameLayout.onLayout(FrameLayout.java:273)
| |
26
android.view.View.layout(View.java:16754)
| |
27
android.view.ViewGroup.layout(ViewGroup.java:5462)
| |
28
android.widget.LinearLayout.setChildFrame(LinearLayout.java:1764)
| |
29
android.widget.LinearLayout.layoutVertical(LinearLayout.java:1607)
| |
30
android.widget.LinearLayout.onLayout(LinearLayout.java:1516)
| |
31
android.view.View.layout(View.java:16754)
| |
32
android.view.ViewGroup.layout(ViewGroup.java:5462)
| |
33
android.widget.FrameLayout.layoutChildren(FrameLayout.java:338)
| |
34
android.widget.FrameLayout.onLayout(FrameLayout.java:273)
| |
35
android.view.View.layout(View.java:16754)
| |
36
android.view.ViewGroup.layout(ViewGroup.java:5462)
| |
37
android.widget.LinearLayout.setChildFrame(LinearLayout.java:1764)
| |
38
android.widget.LinearLayout.layoutVertical(LinearLayout.java:1607)
| |
39
android.widget.LinearLayout.onLayout(LinearLayout.java:1516)
| |
40
android.view.View.layout(View.java:16754)
| |
41
android.view.ViewGroup.layout(ViewGroup.java:5462)
| |
42
android.widget.FrameLayout.layoutChildren(FrameLayout.java:338)
| |
43
android.widget.FrameLayout.onLayout(FrameLayout.java:273)
| |
44
com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2748)
| |
45
android.view.View.layout(View.java:16754)
| |
46
android.view.ViewGroup.layout(ViewGroup.java:5462)
| |
47
android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2226)
| |
48
android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1983)
| |
49
android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1139)
| |
50
android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6238)
| |
51
android.view.Choreographer$CallbackRecord.run(Choreographer.java:884)
| |
52
android.view.Choreographer.doCallbacks(Choreographer.java:696)
| |
53
android.view.Choreographer.doFrame(Choreographer.java:631)
| |
54
android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:870)
| |
55
android.os.Handler.handleCallback(Handler.java:743)
| |
56
android.os.Handler.dispatchMessage(Handler.java:95)
| |
57
android.os.Looper.loop(Looper.java:150)
| |
58
android.app.ActivityThread.main(ActivityThread.java:5621)
| |
59
java.lang.reflect.Method.invoke(Native Method)
| |
60
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
| |
61
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
|
我adapter中有两个布局,分别把item设置成 1 和 2 ,然后在 getViewTypeCount 中返回2(有两个布局)。
感觉完全没有问题,但是为什么会这样呢?
后来发现:
getViewTypeCount() 的返回值必须要大于getItemViewType()的返回值。
具体为什么这样我也不清楚,反正这样写就不会出问题,哈哈哈哈,如果有哪位大神知道的话可以给我留言哦。
所以,我们如果以后要写多布局的adapter的话,type一定要从 0 开始。