【问题标题】:How to set multiple Recycleview to single adapter in Firebase (MultipleView Type)?如何在 Firebase 中将多个 Recyclerview 设置为单个适配器(多视图类型)?
【发布时间】: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);
            }
        }
    }

【问题讨论】:

    标签: java android firebase firebase-realtime-database google-cloud-platform


    【解决方案1】:

    编程中最重要的思想之一是reusability,我引用了“在计算机科学和软件工程中,可重用性是在软件产品开发中以某种形式使用现有资产过程”。

    因此,如果唯一不同的是模型类和布局文件,那么您可以创建一个适配器类。解决这个问题的关键是使用generics。这是一个工作示例:

    【讨论】:

    • 如果您认为我的回答对未来的 Firebase 开发人员也有帮助,也请考虑 offering a vote-up (▲)。我真的很感激。谢谢!
    【解决方案2】:

    当您想使用回收视图和适配器在列表中显示项目时,这些项目通常具有相似的 UI 并且基于相同类型的数据(例如汽车、人员、建筑物等)。在单个适配器中混合不同的实体不是一个好主意。数据源可以有不同的长度,并且列表项会有不同的 UI。因此,坚持这个想法 - 一个 Recycle View 和一个适配器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      相关资源
      最近更新 更多