Если не говорить про NavigationComponent из Jetpack, то для добавления, переключения и удаления фрагментов используются два класса, FragmentManager и FragmentTransaction, но на самом деле почти все происходит в FragmentTransaction, менеджер нужен только чтобы получить транзакцию.
Получить транзакцию можно методом менеджера beginTransaction(). Чтобы добавить фрагмент используется метод add(), чтобы заменить replace(), а чтобы удалить remove(). Транзакция может принимать несколько методов.
Метод add() принимает в качестве аргументов id View, в который будет помещен фрагмент (сейчас рекомендуется в качестве контейнеров для фрагментов использовать FragmentContainerView), а также сам фрагмент (либо класс фрагмента). Так же опционально можно передать args и tag
Метод replace() принимает все то же самое что и add в качестве аргументов, за исключением класса. Заменять фрагменты можно только объектами.
Метод remove() принимает только объект класса Fragment.
После вызова всех методов необходимо вызвать метод commit() транзакции, таким образом все изменения вступят в силу. Так же можно вместо использования beginTransaction() и commit() использовать метод fragmentManager.commit { }, который автоматически вызовет beginTransaction() и commit(), но для этого необходимо подключить библиотеку fragment-ktx