Взаимодействие фрагмента активности с шиной событий и TabLayout - PullRequest
0 голосов
/ 07 мая 2019

У меня есть tabLayout и fragment с viewPager в моей деятельности. Когда эти tabs переключаются, я запрашиваю данные с выбранным текстом вкладки из firebaseFirestore, чтобы заполнить мои recyclerView внутри моих fragment.

Я обрабатываю запрос внутри fragment, поэтому я отправляю текст выбранной вкладки с activity на fragment через eventBus.

Однако моя логика не работает, как ожидалось. Я не получил пропущенный string при запуске активности.

Фрагмент

     @Override
        public void onStart() {
            super.onStart();
            EventBus.getDefault().register(this);
        }

        @Override
        public void onStop() {
            super.onStop();
            EventBus.getDefault().unregister(this);
        }
        @Subscribe
        public void receivedQueryMessage(final BusMessage message){
            Query firstQuery = firebaseFirestore.collection("Books").whereEqualTo("category", message.getMessage());
            firstQuery.addSnapshotListener(new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
                    for (DocumentChange doc: queryDocumentSnapshots.getDocumentChanges()){
                        if (doc.getType() == DocumentChange.Type.ADDED){
                            String categoriesPostID = doc.getDocument().getId();
                            BookCategory bookCategory = doc.getDocument().toObject(BookCategory.class).withId(categoriesPostID);
                            post_list.add(bookCategory);
                            booksCategoryRecyclerAdapter.notifyDataSetChanged();

                        }
                    }
                }
            });
        }

**Activity.java**
tabLayout = findViewById(R.id.tabLayout);
        firebaseFirestore.collection("Categories")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                Log.d(TAG, document.getString("title") + " => " + document.getData());
                                tabLayout.addTab(tabLayout.newTab().setText(document.getString("title")));
                                tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
                                spinKitView.setVisibility(View.GONE);
                            }
                            categoriesPagerAdapter = new CategoriesPagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
                            viewPager.setAdapter(categoriesPagerAdapter);
                            tabLayout.getTabAt(categoryPosition).select();

                        } else {
                            Log.d(TAG, "Error getting documents: ", task.getException());
                        }
                    }
                });

        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
                if (tab.getText() != null) {
//sending selected tab text to fragment
                    EventBus.getDefault().post(new BusMessage(tab.getText().toString()));
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }

Как мне обеспечить максимально гладкую связь?

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