0

我正在尝试将多个视图放入一个列表视图中,但即使我使用 getItemViewType() 和 getViewTypeCount),它也不起作用,错误是:“ArrayIndexOutofBoundsException length=2; index=2;

这是我的代码:

public class SearchAdapter extends BaseAdapter {
private static final int TYPE_MOVIE = 1;
private static final int TYPE_ADS = 2;
private Context context;
private List<MovieObject> movies;
private LayoutInflater inflater;

public SearchAdapter(Context context, List<MovieObject> movies) {
    this.context = context;
    this.movies = movies;
    inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getViewTypeCount() {
    // TODO Auto-generated method stub
    return 2;
}

@Override
public int getItemViewType(int position) {
    int separator = (movies.size() / 2) + 1;
    if (position == separator) {
        return TYPE_ADS;
    } else {
        return TYPE_MOVIE;
    }
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return movies.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return movies.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    int type = getItemViewType(position);
    View v = convertView;
    ViewHolder h = null;
    ViewHolderAds h2 = null;
    if (v == null) {
        h = new ViewHolder();
        switch (type) {
        case TYPE_MOVIE:
            v = inflater.inflate(R.layout.adapter_search, null);
            h = new ViewHolder();
            break;
        case TYPE_ADS:
            v = inflater.inflate(R.layout.view_ads, null);
            h2 = new ViewHolderAds();
            v.setTag(h2);
            break;
        default:
            break;
        }
        v.setTag(h);
    } else {
        if (type == TYPE_MOVIE) {
            h = (ViewHolder) v.getTag();
        } else {
            h2 = (ViewHolderAds) v.getTag();
        }

    }
    return v;
}

private class ViewHolder {
    TextView tv_title, tv_date, tv_certification, tv_runtime;
}

private class ViewHolderAds {

}
}
4

1 回答 1

0

改变

private static final int TYPE_MOVIE = 1;
private static final int TYPE_ADS = 2;

private static final int TYPE_MOVIE = 0;
private static final int TYPE_ADS = 1;

在内部,android 使用这些常量作为视图数组的索引,大小由 返回getViewTypeCount(),并且您不能拥有一个大小为 2 且索引为 2 的数组(这就是异常告诉您的内容)

于 2013-11-02T08:26:46.913 回答