我正在尝试为ListView创建自定义适配器,因为列表中的每个项目都可以有不同的视图(链接,切换或无线电组),但是当我尝试运行使用ListView的Activity时,我收到错误,该应用程序停止 . 该应用程序针对Android 1.6平台 .
代码:
public class MenuListAdapter extends BaseAdapter {
private static final String LOG_KEY = MenuListAdapter.class.getSimpleName();
protected List<MenuItem> list;
protected Context ctx;
protected LayoutInflater inflater;
public MenuListAdapter(Context context, List<MenuItem> objects) {
this.list = objects;
this.ctx = context;
this.inflater = (LayoutInflater)this.ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.i(LOG_KEY, "Position: " + position + "; convertView = " + convertView + "; parent=" + parent);
MenuItem item = list.get(position);
Log.i(LOG_KEY, "Item=" + item );
if (convertView == null) {
convertView = this.inflater.inflate(item.getLayout(), null);
}
return convertView;
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int position) {
return true;
}
@Override
public int getCount() {
return this.list.size();
}
@Override
public MenuItem getItem(int position) {
return this.list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
Log.i(LOG_KEY, "getItemViewType: " + this.list.get(position).getLayout());
return this.list.get(position).getLayout();
}
@Override
public int getViewTypeCount() {
Log.i(LOG_KEY, "getViewTypeCount: " + this.list.size());
return this.list.size();
}
}
我收到的错误:
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)
我知道应用程序从 getView
返回,一切似乎都是有序的 .
关于可能导致这种情况的任何想法都将受到赞赏 .
谢谢,
-担
4 回答
您要返回的项目视图类型
getItemViewType()
是>= getViewTypeCount()
.接受的答案是正确的 . 这就是我要做的就是避免这个问题:
当getItemType值错误时出现问题 . 此值应为整数,应为0到getViewTypeCount() - 1 .
原因很可能是因为getItemViewType方法返回了错误的值! listview中的每一行都是一个View . 虽然scrooling getItemViewType达到了View的计数以上 .
What to do? How to avoid issue?
首先确定列表视图中首先显示的视图(行) . 滚动时使用模块化方程
在这个例子中有十个视图(10行) .
Important
一些用户在stackoverflow上提到另一个问题的方法
在getView覆盖方法上 .