В моем приложении 5 фрагментов. Для переключения между ними я использую нижнюю панель навигации.
Кроме того, мне нужно открывать действия из моих фрагментов, но когда я открываю новое действие, оно открывается в каждом из фрагментов. (Я имею в виду по фрагментам, в каждом случае)
Как сделать активность открытой в одном кейсе?
Мой код:
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment fragment = null;
switch (item.getItemId()) {
case R.id.nav_home:
fragmentManager.beginTransaction().hide(active).show(fragment1).commit();
active = fragment1;
return true;
case R.id.nav_bookmark:
fragmentManager.beginTransaction().hide(active).show(fragment2).commit();
active = fragment2;
return true;
case R.id.nav_blog:
fragmentManager.beginTransaction().hide(active).show(fragment3).commit();
active = fragment3;
return true;
case R.id.nav_notification:
fragmentManager.beginTransaction().hide(active).show(fragment4).commit();
active = fragment4;
return true;
case R.id.nav_account:
fragmentManager.beginTransaction().hide(active).show(fragment5).commit();
active = fragment5;
return true;
}
return false;
}
};
Спасибо!
Согласно Документация Android, действие всегда помещается поверх текущего стека действий.
Итак, если у вас есть MainActivity
с BottomNavigationView
и фрагментами, запуск нового действия откроет действие над MainActivity
с BottomNavigationView
. Таким образом, невозможно открыть действие только в одном из фрагментов BottomNavigationView
.
Чтобы добиться желаемого поведения, рассмотрите возможность использования другого Fragment
.
@MartinZeitler Я думаю, что у него есть смысл, когда он не использует replace вместе с BottomNavigationView. Насколько я понимаю, при замене в FragmentTransaction всегда будет вызываться onCreateView нового фрагмента, что не очень хорошо для производительности приложения. С помощью кода, который он использует, видимый фрагмент не всегда вызывает onCreateView. Поправьте меня, если я ошибаюсь.
Очевидно, что это проблема FragmentManager, а не Activity.
Вместо .hide().show()
используйте .replace()
.
Для справки см. документация.
Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его сообщением. - Из обзора
@JonathanGagne вы прочитали и поняли вопрос, на который точно дан ответ? другой ответ не отвечает на вопрос. проблема очевидна и сказать больше нечего. это качество против количества при сравнении двух предоставленных ответов. как можно просмотреть вопросы по Android
, не имея ни одного балла по Android
? просто щелкните skip
.
для справки: developer.android.com/reference/androidx/fragment/app/… ... и это явно проблема FragmentManager
, а не проблема Activity
.
Не могли бы вы добавить полный код?