При замене фрагмента новый фрагмент не перекрывает старый
Всем привет. Столкнулся вот с такой проблемой при замене фрагмента,старый фрагмент остается виден под новым фрагментом

Изначально при запуске приложения появляется фрагмент приветствия с картинкой, затем фрагменты меняются но экран приветствия остается. Вот мой код
(activity as AppCompatActivity).supportFragmentManager
.beginTransaction()
.setCustomAnimations(
R.anim.enter_from_right,
R.anim.exit_to_right
)
.replace(R.id.nav_host_fragment, FoodAnalysisFragment())
.commit()
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:navGraph = "@navigation/mobile_navigation"
app:defaultNavHost="true"
/>
Так же есть еще вторая проблема. Я скрыл toolbar в стартовом фрагменте с приветствием и при вызове следующего фрагмента я обратно показываю toolbar, но toolbar отображается с предыдущего фрагмента
так я прячу toolbar в стартовом фрагменте
(activity as AppCompatActivity).supportActionBar?.hide()
и аналогичным способом отображаю toolbar в новом фрагменте но в место hide() вызываю show(). Как сделать так чтоб после показа экрана с приветствием я больше не мог обращаться к нему? Заранее спасибо за помощь
Ответы (3 шт):
Вы можете второму фрагменту сделать непрозрачный фон (т.е. явно указать белый цвет фона к примеру), и тогда вы не будете видеть нижний фрагмент.
Попробуйте в разметке поместит контейнер
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/container"/>
а уже в нем делать replace, иначе у вас как я понял fragment сам становится контейнером, что приводит к этому эффекту. Первый фрагмент также должен быть помещен в этот контейнер.
Почему бы Вам сначала не удалить первый фрагмент, а потом просто добавить второй?
Что-то типа:
(activity as AppCompatActivity).supportFragmentManager
.beginTransaction()
.remove(первый фрагмент)
.add(R.id.nav_host_fragment, FoodAnalysisFragment(), "food_analysis_tag");
.commit();
Вы использовали статический вариант добавления фрагментов, где особо и не предполагается, что фрагменты будут удалять и добавлять.
Другое дело, использовать динамический вариант добавления фрагментов. В этом случае Вы просто создаете пустой контейнер, куда можете добавлять сколь угодно фрагментов [предварительно опустошая контейнер].