В настоящее время я работаю над приложением, для которого я хочу иметь несколько фрагментов для своих просмотров.Я попытался инициализировать свои фрагменты в методах onCreate () и onStart ().Оба раза я получаю сообщение об ошибке «FragmentManager уже выполняет транзакцию». Оно также ссылается на возможный ноль для getActivity () в домашнем фрагменте.Я не могу найти обходной путь для этого.
//The spot where I am attempting to initialize the fragments with the InitializeFragment() method*
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
firebaseFirestore = FirebaseFirestore.getInstance();
mainToolbar = (Toolbar) findViewById(R.id.main_toolbar);
setSupportActionBar(mainToolbar);
getSupportActionBar().setTitle("Photo Blog");
if(mAuth.getCurrentUser() != null) {
mainbottomNav = findViewById(R.id.mainBottomNav);
// FRAGMENTS
homeFragment = new HomeFragment();
notificationFragment = new NotificationFragment();
accountFragment = new AccountFragment();
initializeFragment();
mainbottomNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.main_container);
switch (item.getItemId()) {
case R.id.bottom_action_home:
replaceFragment(homeFragment, currentFragment);
return true;
case R.id.bottom_action_account:
replaceFragment(accountFragment, currentFragment);
return true;
case R.id.bottom_action_notif:
replaceFragment(notificationFragment, currentFragment);
return true;
default:
return false;
}
}
});
//The initializeFragment() method
private void initializeFragment(){
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.main_container, homeFragment);
fragmentTransaction.add(R.id.main_container, notificationFragment);
fragmentTransaction.add(R.id.main_container, accountFragment);
fragmentTransaction.hide(notificationFragment);
fragmentTransaction.hide(accountFragment);
fragmentTransaction.commitNow();
}
//The portion of my homeFragment that has the null warning
Query firstQuery = firebaseFirestore.collection("Posts").orderBy("timestamp", Query.Direction.DESCENDING).limit(3);
firstQuery.addSnapshotListener(getActivity(), new EventListener<QuerySnapshot>() {
@Override
public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {
if (!documentSnapshots.isEmpty()) {
if (isFirstPageFirstLoad) {
lastVisible = documentSnapshots.getDocuments().get(documentSnapshots.size() - 1);
blog_list.clear();
}
for (DocumentChange doc : documentSnapshots.getDocumentChanges()) {
if (doc.getType() == DocumentChange.Type.ADDED) {
String blogPostId = doc.getDocument().getId();
BlogPost blogPost = doc.getDocument().toObject(BlogPost.class).withId(blogPostId);
if (isFirstPageFirstLoad) {
blog_list.add(blogPost);
} else {
blog_list.add(0, blogPost);
}
blogRecyclerAdapter.notifyDataSetChanged();
}
}
isFirstPageFirstLoad = false;
}
}
});