У меня есть 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) {
}
});
}
Как мне обеспечить максимально гладкую связь?