【问题标题】:how to create multi recyclerview that displays data per category如何创建显示每个类别数据的多回收视图
【发布时间】:2020-08-11 20:09:10
【问题描述】:

在我的项目中,我想按类别查询显示从 firebase 到 recycleview 的信息,例如:

布局 1 包含菜单查询 A 布局 2 包含一个菜单查询 B 等等

这是我的代码

   @ Override
     protected void onCreate (Bundle savedInstanceState) {
         super.onCreate (savedInstanceState);
         setContentView (R.layout.activity_post_list);



     // ActionBar actionBar = getSupportActionBar ();
       // actionBar.setTitle ("post list");

         mRecyclerView = findViewById (R.id.recyclerView);
         mRecyclerView.setHasFixedSize (true);
         mRecyclerView.setLayoutManager (new LinearLayoutManager (this));
         mFirebaseDatabase = FirebaseDatabase.getInstance ();

         mRef = mFirebaseDatabase.getReference ("Data / Menu1"); //this section takes queries from firebase addresses


     }


this is my firebase query

如何在不制作很多课程的情况下制作多recycleview?

【问题讨论】:

  • 您能详细解释一下您要达到的目标吗?您的问题似乎不清楚。
  • 我想将来自 firebase 的数据显示到许多回收站视图中,在我的 firebase 查询中有很多类别,我想以不同的布局显示每个子查询。
  • 根据您的 Firebase 屏幕截图,我可以看到所有项目的模式都是相同的。每个数据都在一个类别中,例如:菜单 1、菜单 2 等。对于此类数据模式,您不需要多个回收器视图。这也可以使用单个 Layout 轻松实现
  • 那么我应该制作/制作哪个部分?我很困惑如何制作可以进行不同查询的单一布局。对不起,我只是一个初学者

标签: android firebase android-studio android-recyclerview android-context


【解决方案1】:

Android 开发教程 - Recycler View 中的 Recycler View,例如使用 Firebase 实时数据库的 Google Play。

我希望这个视频会有所帮助。 https://www.youtube.com/watch?v=K2FSLZzYnnQ&t=1s

【讨论】:

    【解决方案2】:

    要显示每个类别的数据,您可以使用分段适配器。请看一个例​​子 https://github.com/luizgrp/SectionedRecyclerViewAdapter

    【讨论】:

      【解决方案3】:

      您可以将此活动作为示例来帮助您入门

      SampleActivity.java

      public class SampleActivity extends AppCompatActivity {
          DatabaseReference mRef;
          FirebaseDatabase mFirebaseDatabase;
          RecyclerView mRecyclerView;
      
      
          ArrayList<InnerDataModel> innerDataModelsMenu1ForAdapter;
          ArrayList<InnerDataModel> innerDataModelsMenu2ForAdapter;
      
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_sample);
              mRecyclerView = findViewById(R.id.recyclerView);
              innerDataModelsMenu1ForAdapter = new ArrayList<>();
              innerDataModelsMenu2ForAdapter = new ArrayList<>();
          }
      
      
          @Override
          protected void onStart() {
              super.onStart();
      
              getDataFromFirestore();
          }
      
          private void getDataFromFirestore() {
      
              mFirebaseDatabase = FirebaseDatabase.getInstance();
              mRef = mFirebaseDatabase.getReference("Data/");
              //Get all the data from the Firbase Realtime Database
              mRef.addListenerForSingleValueEvent(new ValueEventListener() {
      
                  @Override
                  public void onDataChange(DataSnapshot dataSnapshot) {
      
                      for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                          String menuType = snapshot.getKey();
                          if (!TextUtils.isEmpty(menuType)) {
                              //Write logic for each different menu type
      
                              ArrayList<InnerDataModel> innerDataModelsMenu1 = new ArrayList<InnerDataModel>();
                              ArrayList<InnerDataModel> innerDataModelsMenu2 = new ArrayList<InnerDataModel>();
      
                              if (menuType.equals("Menu1")) {
      
                                  for (DataSnapshot snapshotInner : dataSnapshot.child("Menu1").getChildren()) {
                                      innerDataModelsMenu1.add(snapshotInner.getValue(InnerDataModel.class));
                                  }
      
                                  runCodeForMenu1(innerDataModelsMenu1);
                              }
                              if (menuType.equals("Menu2")) {
      
                                  for (DataSnapshot snapshotInner : dataSnapshot.child("Menu2").getChildren()) {
                                      innerDataModelsMenu2.add(snapshotInner.getValue(InnerDataModel.class));
                                  }
      
                                  runCodeForMenu2(innerDataModelsMenu2);
                              }
                          }
                      }
      
                  }
      
                  @Override
                  public void onCancelled(DatabaseError databaseError) {
                      //No Data present
                  }
      
              });
      
      
          }
      
          private void runCodeForMenu2(ArrayList<InnerDataModel> children) {
      
              innerDataModelsMenu2ForAdapter.addAll(children);
              Log.d("SampleActivity", innerDataModelsMenu2ForAdapter.toString() + "");
      
          }
      
          private void runCodeForMenu1(ArrayList<InnerDataModel> children) {
              innerDataModelsMenu1ForAdapter.addAll(children);
              Log.d("SampleActivity", innerDataModelsMenu1ForAdapter.toString() + "");
          }
      }
      

      InnerDataModel.java

      public class InnerDataModel {
          private String image;
          private String title;
          private String description;
      
          public String getImage() {
              return image;
          }
      
          public void setImage(String image) {
              this.image = image;
          }
      
          public String getTitle() {
              return title;
          }
      
          public void setTitle(String title) {
              this.title = title;
          }
      
          public String getDescription() {
              return description;
          }
      
          public void setDescription(String description) {
              this.description = description;
          }
      }
      

      收到并处理来自 FireBase 的数据后,您可以根据两个全局 ArrayLists innerDataModelsMenu1ForAdapter 和 innerDataModelsMenu2ForAdapter 处理您的适配器,并在您的活动中处理它以在 CardView 中显示数据

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-27
        • 1970-01-01
        相关资源
        最近更新 更多