左侧显示为数据类,视图类型== 0
右侧显示为MeData类,视图类型== 2
目前,我想通过recyclerview使用两种多视图类型。
Data和MeData是两种类型的类。
如果getItemViewType(int位置)的返回值是0,则数据类的ui正常工作,但是如果返回值2,则Me数据类不起作用并发生错误。
+
为这两种视图类型定义了一个不同的函数,但没有为MeData定义getItemCount
函数。
private ArrayList<Data> Data = new ArrayList<Data>();
private ArrayList<MeData> MeData = new ArrayList<MeData>();
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType == 0) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.chatitem, parent, false);
return new ViewHolder0(view);
}
else{
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.chatitem2, parent, false);
return new ViewHolder2(view);
}
}
@Override
public int getItemViewType(int position) {
// Just as an example, return 0 or 2 depending on position
// Note that unlike in ListView adapters, types don't have to be contiguous
//return position 0; <- not error
return position % 2 * 2; <- error
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if(holder.getItemViewType() == 0){
((ViewHolder0) holder).onBind(Data.get(position));
}
else{
((ViewHolder2) holder).onBind(MeData.get(position));
}
}
@Override
public int getItemCount() {
return Data.size();
}
void addItem(Data data) {
Data.add(data);
}
void addItem(MeData data) {
MeData.add(data);
}
如果getItemViewType
的返回值为2,为什么会发生错误?以及我们如何解决呢?