使用的关键点是在adapter覆盖两个方法
public int getItemViewType(int position)
public int getViewTypeCount()
其它的可另google,这里要说个重点的问题。
我做多个view,总是会报错
java.lang.ArrayIndexOutOfBoundsException at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:3523) at android.widget.ListView.measureHeightOfChildren(ListView.java:1158) at android.widget.ListView.onMeasure(ListView.java:1060) at android.view.View.measure(View.java:7703)
找了很久很久,有一篇外国文章说到问题所在:
http://stackoverflow.com/questions/2596547/arrayindexoutofboundsexception-with-custom-android-adapter-for-multiple-views-in
getItemViewType() is >= getViewTypeCount()
看懂一点,就是不能大于视图数量,后再继续找到这文章
http://blog.csdn.net/clarketang/article/details/6873393
其中,关键点说到了原因:
当ListView要显示某一项时,getItemViewType方法被调用,根据返回值在mRecycler搜索得到缓存的视图。这也是为什么getViewTypeCount返回值要比定义的视图类型常量值大的原因,否则会导致数组越界异常。
Have fun with Android!