Вам нужно использовать FragmentManager и FragmentTransaction, чтобы добавить свой фрагмент на лету. вы можете вызвать функцию, подобную этой, в методе onClick вашей кнопки. Но рекомендуется, чтобы родительская активность обрабатывала жизненный цикл каждого фрагмента и фрагменты не должны взаимодействовать друг с другом. Следующее взято из документации разработчика, что можно найти здесь. «Часто вам нужно, чтобы один фрагмент взаимодействовал с другим, например, для изменения содержимого на основе пользовательского события. Вся связь между фрагментами осуществляется либо через общую модель представления, либо через связанную активность. Два фрагмента никогда не должны взаимодействовать напрямую. ."
fun createFragmentonTheFly(){
var mFragmentTransaction: FragmentTransaction = getSupportFragmentManager().beginTransaction()
mFragmentTransaction.add(R.id.fr_container,new ProductListFragment())
mFragmentTransaction.commit()
}
Лучший способ сделать это - добавить интерфейс, скажем, onFragmentDetachedLisetner и добавить один метод replaceFragment() или что-то еще, и заставить вашу активность реализовать этот интерфейс и заменить его, как только фрагмент будет отсоединен, и сделать ваш фрагмент, содержащий вашу кнопку завершиться, когда пользователь нажмет кнопку, тогда ваша активность заменит ее той, которую вы хотели запустить. А также подумайте о повторном использовании фрагментов, так как это в первую очередь основная цель фрагментов.