Начать действие из фрагмента с помощью нижней панели навигации

В моем приложении 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;
    }
};

Спасибо!

Не могли бы вы добавить полный код?

Volodymyr Bereziuk 16.12.2018 21:34
2
1
458
2

Ответы 2

Согласно Документация Android, действие всегда помещается поверх текущего стека действий.

Итак, если у вас есть MainActivity с BottomNavigationView и фрагментами, запуск нового действия откроет действие над MainActivity с BottomNavigationView. Таким образом, невозможно открыть действие только в одном из фрагментов BottomNavigationView.

Чтобы добиться желаемого поведения, рассмотрите возможность использования другого Fragment.

@MartinZeitler Я думаю, что у него есть смысл, когда он не использует replace вместе с BottomNavigationView. Насколько я понимаю, при замене в FragmentTransaction всегда будет вызываться onCreateView нового фрагмента, что не очень хорошо для производительности приложения. С помощью кода, который он использует, видимый фрагмент не всегда вызывает onCreateView. Поправьте меня, если я ошибаюсь.

BenjyTec 17.12.2018 12:41

Очевидно, что это проблема FragmentManager, а не Activity. Вместо .hide().show() используйте .replace().
Для справки см. документация.

Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его сообщением. - Из обзора

Jonathan Gagne 16.12.2018 23:23

@JonathanGagne вы прочитали и поняли вопрос, на который точно дан ответ? другой ответ не отвечает на вопрос. проблема очевидна и сказать больше нечего. это качество против количества при сравнении двух предоставленных ответов. как можно просмотреть вопросы по Android, не имея ни одного балла по Android? просто щелкните skip.

Martin Zeitler 17.12.2018 01:32

для справки: developer.android.com/reference/androidx/fragment/app/… ... и это явно проблема FragmentManager, а не проблема Activity.

Martin Zeitler 17.12.2018 01:36

Другие вопросы по теме