Это происходит потому, что вы поместили свой Button
внутрь ConstraintLayout
, который вы используете в качестве контейнера вашего фрагмента.
Когда вы add
фрагмент в контейнер, как то, что вы делаете, он просто добавляет его таким же образом, как если бы это был View
.
Поэтому, если вы добавите Фрагмент в ConstraintLayout
, который уже имеет Button
в качестве дочернего элемента, Фрагмент будет показан рядом с Button
из-за ConstraintLayout
, допускающего перекрывающиеся виды.
По этой же причине, если ваш контейнер был LinearLayout
, то добавление фрагмента поместит фрагмент под Button
.
Итак, счто в виду, решение будет обрабатывать это, как если бы они были представления.
Если вы добавили вид в макет и у вас есть другой вид, перекрывающийся, как бы вы избавились от него?
Наиболее распространенным решением было бы установить видимость кнопки на НЕВИДИМ или УДАЛЕНО при добавлении фрагмента.
Другое решение может заключаться в увеличении высоты фрагмента, так что теперь он выше, чем ваш Button
.
Конечно, вы также можете удалить кнопку из контейнера и поместить ее внутрь фрагмента.
Таким образом, вы можете использовать метод replace()
в FragmentManager
, чтобы заменить фрагмент, содержащий ваш Button
, на Fragment
, который вы хотите показать.