如何在 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函数中将参数传递给cors

如何在 Firebase 中将 emailAndPasswordAuth 与 PhoneAuth 合并?

如何在 Flutter 移动应用中将 Azure AD 用户登录到 Firebase?

如何在android中将日期转换为firebase时间戳格式

如何在颤动中将数据从复选框存储到 Firebase