关于listview加载多种item的解决方案
2013-12-16 13:49
429 查看
http://android.amberfog.com/?p=296
今天遇到了一个问题
看着是数组越界了,但是一直找不到原因,最终在这里找到了出错的源头 http://stackoverflow.com/questions/2596547/arrayindexoutofboundsexception-with-custom-android-adapter-for-multiple-views-in
getItemViewType() is >= getViewTypeCount().
private class MyCustomAdapter extends BaseAdapter { private static final int TYPE_ITEM = 0; private static final int TYPE_SEPARATOR = 1; private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1; private ArrayList mData = new ArrayList(); private LayoutInflater mInflater; private TreeSet mSeparatorsSet = new TreeSet(); public MyCustomAdapter() { mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public void addItem(final String item) { mData.add(item); notifyDataSetChanged(); } public void addSeparatorItem(final String item) { mData.add(item); // save separator position mSeparatorsSet.add(mData.size() - 1); notifyDataSetChanged(); } @Override public int getItemViewType(int position) { return mSeparatorsSet.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM; } @Override public int getViewTypeCount() { return TYPE_MAX_COUNT; } @Override public int getCount() { return mData.size(); } @Override public String getItem(int position) { return mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; int type = getItemViewType(position); System.out.println("getView " + position + " " + convertView + " type = " + type); if (convertView == null) { holder = new ViewHolder(); switch (type) { case TYPE_ITEM: convertView = mInflater.inflate(R.layout.item1, null); holder.textView = (TextView)convertView.findViewById(R.id.text); break; case TYPE_SEPARATOR: convertView = mInflater.inflate(R.layout.item2, null); holder.textView = (TextView)convertView.findViewById(R.id.textSeparator); break; } convertView.setTag(holder); } else { holder = (ViewHolder)convertView.getTag(); } holder.textView.setText(mData.get(position)); return convertView; } } public static class ViewHolder { public TextView textView; } }
今天遇到了一个问题
01-08 22:54:27.758: E/AndroidRuntime(1641): java.lang.ArrayIndexOutOfBoundsException: length=11; index=11 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:7127) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.ListView.layoutChildren(ListView.java:1565) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.AbsListView.onLayout(AbsListView.java:2307) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.View.layout(View.java:14101) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewGroup.layout(ViewGroup.java:4657) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.View.layout(View.java:14101) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewGroup.layout(ViewGroup.java:4657) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:948) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.View.layout(View.java:14101) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewGroup.layout(ViewGroup.java:4657) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.View.layout(View.java:14101) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewGroup.layout(ViewGroup.java:4657) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1644) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.onLayout(LinearLayout.java:1428) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.View.layout(View.java:14101) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewGroup.layout(ViewGroup.java:4657) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.View.layout(View.java:14101) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewGroup.layout(ViewGroup.java:4657) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.View.layout(View.java:14101) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewGroup.layout(ViewGroup.java:4657) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.View.layout(View.java:14101) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewGroup.layout(ViewGroup.java:4657) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1644) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.onLayout(LinearLayout.java:1428) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.View.layout(View.java:14101) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewGroup.layout(ViewGroup.java:4657) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.View.layout(View.java:14101) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewGroup.layout(ViewGroup.java:4657) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.View.layout(View.java:14101) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewGroup.layout(ViewGroup.java:4657) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.View.layout(View.java:14101) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewGroup.layout(ViewGroup.java:4657) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2005) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1826) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1121) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4598) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.Choreographer.doCallbacks(Choreographer.java:555) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.Choreographer.doFrame(Choreographer.java:525) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.os.Handler.handleCallback(Handler.java:615) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.os.Handler.dispatchMessage(Handler.java:92) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.os.Looper.loop(Looper.java:137) 01-08 22:54:27.758: E/AndroidRuntime(1641): at android.app.ActivityThread.main(ActivityThread.java:4921) 01-08 22:54:27.758: E/AndroidRuntime(1641): at java.lang.reflect.Method.invokeNative(Native Method) 01-08 22:54:27.758: E/AndroidRuntime(1641): at java.lang
看着是数组越界了,但是一直找不到原因,最终在这里找到了出错的源头 http://stackoverflow.com/questions/2596547/arrayindexoutofboundsexception-with-custom-android-adapter-for-multiple-views-in
getItemViewType() is >= getViewTypeCount().
相关文章推荐
- C语言堆栈入门——堆和栈的区别
- 关于Oracle 10g的schedule job
- jackson 注解的使用
- 多线程第七篇:互斥和同步总结
- (转)Apple Push Notification Services in iOS 6 Tutorial: Part 1/2
- 哎呀
- 归并排序1
- RedHat安装oracle 10g系统环境配置脚本
- 面试10大算法汇总+常见题目解答
- Oracle 常用的几个命令在SQL*PLUS中
- linux之 查看文件命令cat,more,less,tail,tac,nl,od .
- php.ini 中开启短标签 <?=$?>
- jpeg
- [置顶] 每日震精图
- 几种简单的排序算法
- 机器学习资料总结
- Oracle查看用户表
- python3.2安装tornado
- js多个引力小球计算
- 电驴不能下载的办法