Ваш подход хорош, но он выполняет множество ненужных дорогостоящих поисков фрагментов.
Вы можете получить идентификатор навигации текущего фрагмента с помощью:
navController.getCurrentDestination().getId()
Затем вы можете использовать этот возвращенный идентификатор для выполнения различных действий в прослушивателе кликов на основе фрагмента, например:
fun fabClicked() {
val id = navController.getCurrentDestination().getId()
val class = when(id) {
R.id.fragment_1 -> Add1::class
R.id.fragment_2 -> Add2::class
// etc
}
startActivity(Intent(this, class.javaClass))
}
Таким образом, вам не нужно выполнять поиск фрагментов для каждого условия просто сравните идентификаторы. Вы также можете извлечь общий startActivity
logi c (как показано здесь), чтобы сделать его более кратким.