如何在 Firebase 中将多个 Recyclerview 设置为单个适配器(多视图类型)?
Posted
技术标签:
【中文标题】如何在 Firebase 中将多个 Recyclerview 设置为单个适配器(多视图类型)?【英文标题】:How to set multiple Recycleview to single adapter in Firebase (MultipleView Type)? 【发布时间】:2022-01-05 05:02:06 【问题描述】:如何在 Firebase 中将多个 RecycleView 设置为单个适配器?
我正在创建一个应用程序,我的应用程序中有很多类别,创建多个适配器、模型和 RecycleView 会使应用程序变得复杂。很难为多个 RecycleView 制作不同的适配器。
我可以将多个 RecycleView 设置为一个适配器吗?通过使用 if 或 else 或 switch 案例如何做到这一点?
或者有其他选择吗?
第一个模型类
public class FirstModel
private String Image, Text;
FirstModel()
public FirstModel(String image, String text)
Image = image;
Text = text;
public String getImage()
return Image;
public void setImage(String image)
Image = image;
public String getText()
return Text;
public void setText(String text)
Text = text;
第二个模型类
public class SecondModel
private String Image, Text;
SecondModel()
public SecondModel(String image, String text)
Image = image;
Text = text;
public String getImage()
return Image;
public void setImage(String image)
Image = image;
public String getText()
return Text;
public void setText(String text)
Text = text;
链接到一个适配器
public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
private final int FirstLayout = 0;
private final int SecondLayout = 1;
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
View view;
if (viewType == FirstLayout)
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sample_categories, null);
return new GiftsForHerViewHolder(view);
else
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sample_categories, null);
return new GiftsForHimViewHolder(view);
@Override
public int getItemViewType(int position)
????
return super.getItemViewType(position);
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position)
switch (holder.getItemViewType())
case 1:
?????
@Override
public int getItemCount ()
return ???? .size();
class FirstViewHolder extends RecyclerView.ViewHolder
private ImageView Image;
private TextView Text;
public FirstViewHolder(@NonNull View itemView)
super(itemView);
Image = (ImageView) itemView.findViewById(R.id.Image);
Text = (TextView) itemView.findViewById(R.id.Text);
class SecondViewHolder extends RecyclerView.ViewHolder
public SecondViewHolder(@NonNull View itemView)
super(itemView);
【问题讨论】:
【参考方案1】:编程中最重要的思想之一是reusability,我引用了“在计算机科学和软件工程中,可重用性是在软件产品开发中以某种形式使用现有资产过程”。
因此,如果唯一不同的是模型类和布局文件,那么您可以创建一个适配器类。解决这个问题的关键是使用generics。这是一个工作示例:
Create a Generic Base Adapter?【讨论】:
如果您认为我的回答对未来的 Firebase 开发人员也有帮助,也请考虑 offering a vote-up (▲)。我真的很感激。谢谢!【参考方案2】:当您想使用回收视图和适配器在列表中显示项目时,这些项目通常具有相似的 UI 并且基于相同类型的数据(例如汽车、人员、建筑物等)。在单个适配器中混合不同的实体不是一个好主意。数据源可以有不同的长度,并且列表项会有不同的 UI。因此,坚持这个想法 - 一个 Recycle View 和一个适配器。
【讨论】:
以上是关于如何在 Firebase 中将多个 Recyclerview 设置为单个适配器(多视图类型)?的主要内容,如果未能解决你的问题,请参考以下文章
在 Firebase 数据库中的 MKMapView 上放置多个标记
如何在 Firebase 中将 emailAndPasswordAuth 与 PhoneAuth 合并?
如何在 Flutter 移动应用中将 Azure AD 用户登录到 Firebase?