以下是我的代码:
@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类类型吗?
答案 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);
}