这个问题在这里已有答案:
我想要一个从Firebase实时数据库中获取数据的recyclerView。但是数据库节点包含具有不同模型类的数据。现在,我如何根据dataSnapshot检测我需要使用哪个模型类。
您不需要多个适配器,您需要多个ViewHolders,请检查此How to create RecyclerView with multiple view type?
@Override
public int getItemViewType(int position) {
//... if item is instance of ModelA return 0
//... if item is instance of ModelB return 1
}
然后在onCreateViewHolder上
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0: return new ViewHolder0(...);
case 1: return new ViewHolder1(...);
...
}
}
并在onBindViewHolder中
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
switch (holder.getItemViewType()) {
case 0:
ViewHolder0 viewHolder0 = (ViewHolder0)holder;
...
break;
case 1:
ViewHolder1 viewHolder1 = (ViewHolder1)holder;
...
break;
}
}
如果通过多适配器意味着在recyclerView中显示多种类型的recyclerViewItem,那么只需覆盖适配器类中的getItemViewType方法,然后在onCreateViewHolderHolder中通过检查viewType参数可以相应地使recyclerItemLayouts膨胀。
查看更多信息:https://www.journaldev.com/12372/android-recyclerview-example