Android RecyclerView多个视图类转换异常

时间:2015-07-08 14:29:54

标签: android android-recyclerview

我正在使用RecyclerView,有两个视图的三个视图,它的工作正常但是当我在最后添加第三个视图时,它给了我类强制转换异常。

我认为我在recyclerview中遗漏了一些东西,因为如果我在第二个位置使用我的第三个视图,那么它正在工作。请让我知道我错过了什么。

我的适配器:

@Override
    public int getItemCount() {
        return 10;
    }

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

    View itemLayoutView;
    ViewHolder viewHolder;

    if(getItemViewType(i)==0){

        itemLayoutView = LayoutInflater.from(context)
                .inflate(R.layout.first, null);
        viewHolder = new EnterHolder(itemLayoutView);
    } else if (getItemViewType(i)==1){
        itemLayoutView = LayoutInflater.from(context)
                .inflate(R.layout.last, null);
        viewHolder = new LastHolder(itemLayoutView);
    }
    else {
        itemLayoutView = LayoutInflater.from(context)
                .inflate(R.layout.image, null);
        viewHolder = new ImageHolder(itemLayoutView);
    }

    return viewHolder;
}

@Override
    public int getItemViewType(int position) {
        if(position==0) return 0;
        else if(position==9)return 1;
        else return 2;
    }

@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {

    if(getItemViewType(i)==0){
        EnterHolder enterHolder = (EnterHolder) viewHolder;
        enterHolder.title.setText("first");
    } else if(getItemViewType(i)==1){
        LastHolder lastHolder = (LastHolder) viewHolder;
        lastHolder.title.setText("last");
    }
    else {
        ImageHolder imageHolder = (ImageHolder) viewHolder;
        imageHolder.product_image.setImageResource(R.drawable.demo);
    }

}

Log-cat错误:

java.lang.ClassCastException:com.violetstreet.adapter.HorizontalAdapter$ImageHolder cannot be cast to com.violetstreet.adapter.HorizontalAdapter$

1 个答案:

答案 0 :(得分:3)

this is onCreateViewHolder的签名:

public final VH createViewHolder (ViewGroup parent, int viewType)

如此您将viewType作为参数传递给getItemViewType(),当您确实认为自己正在传递视图的位置时

这是一个普通的错误。将代码int i更改为int viewType,您就会清楚地看到自己的错误