我可以为每个视图持有者类型返回不同的ViewHolder类实例吗?

时间:2017-10-12 02:24:01

标签: android

以下是我的代码:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    if (getItemViewType(i) == REMMEND_TYPE) {
        RecyclerView recyclerView = new RecyclerView(viewGroup.getContext());
        recyclerView.setId(R.id.recycler_view);
        return new RecommendedViewHolder(recyclerView);
    } else {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(
                R.layout.home_item, viewGroup, false);
        return new HomeViewHolder(view);
    }
}

@Override
public int getItemViewType(int position) {
    if (position == 5) {
        return REMMEND_TYPE;
    } else {
        return -1;
    }
    // return super.getItemViewType(position);
}

我将获得类强制转换异常:  java.lang.ClassCastException:com.adapter.HomeViewHolder无法强制转换为com.viewholder.RecommendedViewHolder

所以我想知道我只能为一个适配器返回一个ViewHolder类类型吗?

1 个答案:

答案 0 :(得分:0)

我遇到类问题的原因是第二个参数' i'在onBindViewHolder中是viewType,而不是位置或索引含义,我以错误的方式使用i,我应该直接使用i作为viewtype。我想知道为什么我自动生成覆盖方法,参数缩写为' i',对于我来说,我是' i'意思是指数或位置。我将代码更正如下,现在还可以。

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
    if (viewType == REMMEND_TYPE) {
        RecyclerView recyclerView = new RecyclerView(viewGroup.getContext());
        recyclerView.setId(R.id.recycler_view);
        return new RecommendedViewHolder(recyclerView);
    } else {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(
                R.layout.home_item, viewGroup, false);
        return new HomeViewHolder(view);
    }
}

@Override
public int getItemViewType(int position) {
    if (position == 5) {
        return REMMEND_TYPE;
    }
    return super.getItemViewType(position);
}