我试图找到解决方案,但我认为没有人遇到过这样的问题。
所以我在我的大多数项目中都使用ListView
,我认为在Bind
ViewHolder
与RecyclerView
之间需要做listview
更加灵活1}}。但由于我需要制作水平LayoutManager
,因此我可以使用RecyclerView
轻松地使用ViewHolders
。它完美地运作。
但现在我对RecyclerView
使用了多个RecyclerView
,因为我需要为public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<Item> data;
private Context context;
// Item.Type is an enum, used to differentiate the view types.
public MyAdapter(List<Item> list, Context context) {
this.data = list;
this.context = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(data.get(viewType).getType() == TYPEA) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.type_a, parent, false);
return new ViewHolderA(itemView);
}
else {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.type_b, parent, false);
return new ViewHolderB(itemView);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if ( data.get(position).getType()== TYPEA ){
ViewHolderA viewHolder = (ViewHolderA) holder;
...
}
else if (data.get(position).getType()== TYPEB){
ViewHolderB viewHolder = ((ViewHolderB) holder);
...
}
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public int getItemCount() {
return data.size();
}
}
的不同项目显示不同的视图。它再次使用下面的代码完美地工作。
TYPEB
因此,当我重新排列用于显示项目的列表时,问题就出现了。例如,我从TYPEB
列表中的1个项目开始,它显示正确。但是现在我想在列表中添加新项目但是在开始时,以便TYPEA
被推回。所以我添加了[TYPEA,TYPEB]
的新项目,列表看起来像ViewHolderA
。 TYPEA
用于ViewHolderB
,TYPEB
用于onBindViewHolder
在这种情况下ViewHolderA viewHolder = (ViewHolderA) holder;
ViewHolderB
错误地告诉我ViewHolderA
无法投放到onBindViewHolder
。这显示在重新排列列表后,适配器正在针对ViewHolder
调用positon
错误的 `
Dim x As Integer
Dim test1 As Date
Dim schdWS, compWS As Worksheet
Const H23M59 As Double = 1 - 60 / 86400
Set schdWS = Sheet1
Set compWS = Sheet11
lastrow = schdWS.Cells(Rows.Count, 8).End(xlUp).Row
For x = 20 To lastrow
If IsDate(schdWS.Cells(x, 3).Value) Then
Cells(x, 3).Value = CDate(Int(Cells(x, 3).Value + H23M59))
End If
'test1.NumberFormat = "dd/mm/yyyy"
'schdWS.Cells(x, 3).FormulaR1C1 = test1 & " 23:59"
Next x
实例。知道如何处理这个问题。
答案 0 :(得分:1)
您需要在此处指定唯一ID,您无需返回位置:
@Override
public int getItemViewType(int position) {
return data.get(position).getType()
}
当然,您必须将viewType参数用作类型而不是位置:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == TYPEA) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.type_a, parent, false);
return new ViewHolderA(itemView);
}
else {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.type_b, parent, false);
return new ViewHolderB(itemView);
}
}