Фрагмент повторно создан в нижней части экрана навигации.

Ниже приведен мой код для элемента отображения нижней навигации.

bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { Fragment fragment = null; switch (item.getItemId()) { case R.id.action_one: // Switch to page one fragment = FragmentA.newInstance(); break; case R.id.action_two: // Switch to page two fragment = FragmentB.newInstance(); break; case R.id.action_three: // Switch to page three fragment = FragmentC.newInstance(); break; } getSupportFragmentManager().beginTransaction().replace(R.id.container,fragment,"TAG").commit(); return true; } }); 

Теперь моя проблема возникает каждый раз, когда фрагмент воссоздается и не хочет, чтобы фрагмент был воссоздан каждый раз, когда я также пытался добавить addToBackStack (null), но в этом случае при нажатии кнопки «Назад» продолжает выскакивать фрагменты из стека, которые я не хочу.

Есть ли способ отображения фрагментов на нижней навигационной панели, выбранной без повторного создания фрагмента

Попробуй это :

 bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { Fragment fragment = null; Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.container); switch (item.getItemId()) { case R.id.action_one: // Switch to page one if (!(currentFragment instanceof FragmentA)) { fragment = FragmentA.newInstance(); } break; case R.id.action_two: // Switch to page two if (!(currentFragment instanceof FragmentB)) { fragment = FragmentB.newInstance(); } break; case R.id.action_three: // Switch to page three if (!(currentFragment instanceof FragmentC)) { fragment = FragmentC.newInstance(); } break; } getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, "TAG").commit(); return true; } }); 

Это получит текущий фрагмент в вашем container и если вы снова нажмете на этот фрагмент, который не будет добавлять фрагмент.

Будьте осторожны при replace . Даже если вы предоставите фрагмент, который уже существует в памяти, replace , перезапустите жизненный цикл фрагмента. Чтобы избежать перезапуска, методы объекта транзакции включают в себя add , show и hide , которые могут быть использованы для отображения правильного фрагмента без его перезапуска.

 private fun switchFragment(index: Int) { val transaction = supportFragmentManager.beginTransaction() val tag = fragments[index].tag // if the fragment has not yet been added to the container, add it first if (supportFragmentManager.findFragmentByTag(tag) == null) { transaction.add(R.id.container, fragments[index], tag) } transaction.hide(fragments[navigationBar.currentTabPosition]) transaction.show(fragments[index]) transaction.commit() } 

В библиотеке поддержки v26 вы можете сделать это

 FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); Fragment fragment = mFragmentManager.findFragmentByTag(tag); if (fragment == null) { fragment = new YourFragment(); fragmentTransaction.add(container.getId(), fragment, tag); } else { fragmentTransaction.attach(fragment); } Fragment curFrag = mFragmentManager.getPrimaryNavigationFragment(); if (curFrag != null) { fragmentTransaction.detach(curFrag); } fragmentTransaction.setPrimaryNavigationFragment(fragment); fragmentTransaction.setReorderingAllowed(true); fragmentTransaction.commitNowAllowingStateLoss(); 

SetOnNavigationItemReselectedListener будет лучшим решением для этого

Intereting Posts
JobScheduler отправляет задания дважды (не ожидается) Не удается разрешить com.parse.ParseQueryAdapter В Android SQLite db как сопоставить определенные значения столбцов, которые имеют одинаковые идентификаторы в нескольких таблицах базы данных? Путаница на «позиции» в функции instantiateItem в классе PagerAdapter (android) Android: лучше делать много действий или 1 активность, которая меняется «на лету»? Exoplayer выбрасывает исключение инициализации декодера для больших файлов mp4 в android Любые текстовые редакторы с открытым исходным кодом для Android? Android Scrollable Tabs + Swipe state при прокрутке Как получить ссылку Webview iframe для запуска браузера? Автоматически конвертировать код между Xamarin iOS и Xamarin Android Android: открытие активности SMS с несколькими получателями Самый быстрый способ читать долго из файла? Как андроид: shrinkColumns and android: stretchColumns работают? Отключить прокрутку ListView, содержащегося в ScrollView Инициировать соединение без синхронизации с помощью Bluetooth Low Energy в Android