我使用了以下代码。我试图在回收站视图中对多个布局进行充气。有了这个我得到了铸造错误,即。 viewholder1无法转换为onBindViewHolder中的viewholder(第二个视图)。通过一些调试,我发现onCreateViewHolder中int viewtype调用的位置与onBindViewHolder中的int位置不同。你能解释一下这个区别,我该怎么做才能纠正我的错误?另外,我不确定我的观察。如果我错了,请告诉我错误。
class Adapter_Timeline extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
Vector<TimelineList> vector;
Context mContext;
public Adapter_Timeline(){
}
public Adapter_Timeline(Vector<TimelineList> vector,Context mContext){
this.vector=vector;
this.mContext=mContext;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
RecyclerView.ViewHolder viewHolder;
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view;
if(vector.get(viewType).getType() == 0) {
view = inflater.inflate(R.layout.item_timeline_rv, parent, false);
viewHolder = new VH_Timeline_RV(view);
}else {
view = inflater.inflate(R.layout.item_timeline_rv_1, parent, false);
viewHolder = new VH_Timeline_RV_1(view);
}
return viewHolder;
}
@Override
public int getItemCount(){
return vector.size();
}
@Override
public int getItemViewType(int position) {
if (
vector.get(position).getType()==0) {
return 0;
} else if (vector.get(position).getType()==1) {
return 1;
}
return -1;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
switch (holder.getItemViewType()) {
case 0:
VH_Timeline_RV vh_timeline_rv = (VH_Timeline_RV) holder;
vh_timeline_rv.simpleDraweeView.setImageURI(vector.get(position).getImage());
vh_timeline_rv.location.setText(vector.get(position).getLocation());
vh_timeline_rv.time.setText(vector.get(position).getTime());
vh_timeline_rv.event.setText(vector.get(position).getName());
break;
case 1:
VH_Timeline_RV_1 vh_timeline_rv_1 = (VH_Timeline_RV_1) holder;
vh_timeline_rv_1.location.setText(vector.get(position).getLocation());
vh_timeline_rv_1.time.setText(vector.get(position).getTime());
vh_timeline_rv_1.event.setText(vector.get(position).getName());
vh_timeline_rv_1.topic.setText(vector.get(position).getTopic());
break;
}
答案 0 :(得分:0)
从适配器覆盖的getItemViewType方法返回类型,你试图将它用作索引,这就是你想要的:
if(viewType == 0) {
view = inflater.inflate(R.layout.item_timeline_rv, parent, false);
viewHolder = new VH_Timeline_RV(view);
} else {
view = inflater.inflate(R.layout.item_timeline_rv_1, parent, false);
viewHolder = new VH_Timeline_RV_1(view);
}
在与ListViewAdapter不同的RecyclerViewAdapter上,所有视图都在一个方法(onCreateViewHolder)上创建,所有数据都在方法onBindViewHolder(位置)中设置。
Obs:除了静态最终常量之外,请不要在命名上加上Underline。
答案 1 :(得分:0)
为什么不直接在该位置返回类型?
@Override
public int getItemViewType(int position) {
return vector.get(position).getType()
}
然后只需使用onBindViewHolder中的实际方法:
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
switch (getItemViewType(position)) {
....
}