-2

我正在使用 CardView、Json 加载数据并显示在列表项中。但是我第一次构建,就发生了一个异常是:ArrayIndexOutOfBoundsException

我的适配器类:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {

private static final int TYPE_HEADER = 4;
private static final int TYPE_ITEM = 1;
Context context;
List<CarData> getCarData;  // getDataAdapter
ImageLoader imageThumbLoader;

public RecyclerViewAdapter(List<CarData> getCarData, Context context){
    super();
    this.getCarData = getCarData;
    this.context = context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_items, parent, false);
    ViewHolder viewHolder = new ViewHolder(v);
    return viewHolder;
}

@Override
public void onBindViewHolder(ViewHolder Viewholder, int position) {

        CarData getCarData1 = getCarData.get(position - 1);

        imageThumbLoader = ServerImageParseAdapter.getInstance(context).getImageLoader();

        imageThumbLoader.get(getCarData1.getImageThumb(),
                ImageLoader.getImageListener(
                        Viewholder.imageThumb,//Server Image
                        R.mipmap.bg_icon,//Before loading server image the default showing image.
                        android.R.drawable.ic_dialog_alert //Error image if requested image dose not found on server.
                )
        );

    Viewholder.imageThumb.setImageUrl(getCarData1.getImageThumb(), imageThumbLoader);
    Viewholder.titleName.setText(getCarData1.getTitleName());
    Viewholder.doorName.setText(Html.fromHtml("<b>Số cửa:</b> " + getCarData1.getDoorName()));
    Viewholder.seatName.setText(Html.fromHtml("<b>Số ghế:</b> " + getCarData1.getSeatName()));
    Viewholder.cityName.setText(Html.fromHtml(getCarData1.getCityName()));
    Viewholder.districtName.setText(Html.fromHtml(getCarData1.getDistrictName()));

}

public int getDataAdapter() {
    return getCarData == null ? 0 : getCarData.size();
}

@Override
public int getItemViewType(int position) {
    if (isPositionHeader(position)) {
        return TYPE_HEADER;
    }

    return TYPE_ITEM;
}

@Override
public int getItemCount() {

    return getDataAdapter() + 1;
}

private boolean isPositionHeader(int position) {
    return position == 0;
}


class ViewHolder extends RecyclerView.ViewHolder{

    public TextView titleName;
    public NetworkImageView imageThumb;
    public TextView doorName;
    public TextView seatName;
    public TextView cityName;
    public TextView districtName;

    public ViewHolder(View itemView) {

        super(itemView);

        titleName = (TextView) itemView.findViewById(R.id.titleName);
        imageThumb = (NetworkImageView) itemView.findViewById(R.id.imageThumb);
        doorName = (TextView) itemView.findViewById(R.id.doorName);
        seatName = (TextView) itemView.findViewById(R.id.seatName);
        cityName = (TextView) itemView.findViewById(R.id.cityName);
        districtName = (TextView) itemView.findViewById(R.id.districtName);
    }
  }
}

和 Logcat:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: pl.michalz.hideonscrollexample, PID: 3420
java.lang.ArrayIndexOutOfBoundsException: length=18; index=-1
  at java.util.ArrayList.get(ArrayList.java:310)
  at pl.michalz.hideonscrollexample.RecyclerViewAdapter.onBindViewHolder(RecyclerViewAdapter.java:54)
  at pl.michalz.hideonscrollexample.RecyclerViewAdapter.onBindViewHolder(RecyclerViewAdapter.java:20)
  at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5768)
  at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5801)

如何解决这个错误,我尝试了很多方法,但似乎没有结果。

4

1 回答 1

1

你应该改变

CarData getCarData1 = getCarData.get(position - 1);

CarData getCarData1 = getCarData.get(position);

位置从 0 而不是 1 开始。

于 2016-12-13T05:10:57.353 回答