Android RecyclerView 多个视图 class 抛出异常
Android RecyclerView multiple views class cast exeception
我将 RecyclerView 与三个视图一起用于两个视图,它工作正常,但是当我在最后添加第三个视图时,它给了我 class 转换异常。
我想我在 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);
}
}
日志猫错误:
java.lang.ClassCastException:com.violetstreet.adapter.HorizontalAdapter$ImageHolder cannot be cast to com.violetstreet.adapter.HorizontalAdapter$
this is onCreateViewHolder 的签名:
public final VH createViewHolder (ViewGroup parent, int viewType)
所以 你将 viewType
作为参数传递给 getItemViewType()
,而你实际上相信你正在传递视图的位置 。
这是一个常见的错误。将您的代码 int i
更改为 int viewType
,您会清楚地看到为什么您错了
我将 RecyclerView 与三个视图一起用于两个视图,它工作正常,但是当我在最后添加第三个视图时,它给了我 class 转换异常。
我想我在 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);
}
}
日志猫错误:
java.lang.ClassCastException:com.violetstreet.adapter.HorizontalAdapter$ImageHolder cannot be cast to com.violetstreet.adapter.HorizontalAdapter$
this is onCreateViewHolder 的签名:
public final VH createViewHolder (ViewGroup parent, int viewType)
所以 你将 viewType
作为参数传递给 getItemViewType()
,而你实际上相信你正在传递视图的位置 。
这是一个常见的错误。将您的代码 int i
更改为 int viewType
,您会清楚地看到为什么您错了