как создать мульти-просмотрщик, который отображает данные по категориям - PullRequest
0 голосов
/ 28 апреля 2020

В моем проекте я хочу отобразить информацию из firebase для повторного просмотра по запросу категории, например:

макет 1 содержит запрос меню. Макет 2 содержит запрос меню B et c.

это мой код

   @ 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


     }


это мой пожарный запрос

как сделать несколько повторных обзоров, не создавая много классов?

Ответы [ 3 ]

0 голосов
/ 28 апреля 2020

Для отображения данных по категориям вы можете использовать секционный адаптер. Пожалуйста, посмотрите на пример https://github.com/luizgrp/SectionedRecyclerViewAdapter

0 голосов
/ 28 апреля 2020

Вы можете попробовать это упражнение в качестве образца, чтобы начать

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

0 голосов
/ 28 апреля 2020

Android Руководство по разработке - Recycler. Просмотр в Recycler. Просмотр как Google Play с использованием базы данных Firebase Realtime.

Надеюсь, это видео поможет. https://www.youtube.com/watch?v=K2FSLZzYnnQ&t=1s

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...