Как загрузить фрагмент в BottomNavigationView в зависимости от выбранного элемента?

У меня есть простое приложение, написанное в Котлине, которое имеет BottomNavigationView. Идея состоит в том, чтобы иметь одну активность (MainActivity) с фрагментом, который будет загружен для каждой вкладки в BottomNavigationView.

Я уже создал фрагмент, который я хотел бы загрузить при выборе вкладки (HomeFragment), и уже меняю текст под значками в BottomNavigationView при изменении активной вкладки.

Теперь я хотел бы раздуть / загрузить фрагмент, когда я меняю вкладки. Как мне это сделать?

MainActivity.kt:

class MainActivity : AppCompatActivity() { private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item -> when (item.itemId) { R.id.navigation_enrollments -> { message.setText(R.string.title_enrollments) return@OnNavigationItemSelectedListener true } R.id.navigation_timeline -> { message.setText(R.string.title_timeline) return@OnNavigationItemSelectedListener true } R.id.navigation_home -> { message.setText(R.string.title_home) return@OnNavigationItemSelectedListener true } R.id.navigation_alerts -> { message.setText(R.string.title_alerts) return@OnNavigationItemSelectedListener true } R.id.navigation_profile -> { message.setText(R.string.title_profile) return@OnNavigationItemSelectedListener true } } false } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) } override fun onResume() { super.onResume() setContentView(R.layout.activity_main) val bottomNavigationView = findViewById<BottomNavigationView>(R.id.navigation) bottomNavigationView.selectedItemId = R.id.navigation_home } } 

    Вместо message.setText(R.string.title_enrollments) делают

     supportFragmentManager.beginTransaction() .replace(containerViewId, fragmentInstance, "TAG") .commitAllowingStateLoss() 

    Или вы можете использовать функцию расширения, которую я использую в своем коде, чтобы сделать ее более чистой. Просто добавьте это в некоторый файл .kt

     inline fun FragmentManager.transactStateless(func: FragmentTransaction.() -> Unit) { val transaction = beginTransaction() transaction.func() transaction.commitAllowingStateLoss() } 

    и теперь вы можете добавить удаление фрагмента таким образом:

     supportFragmentManager.transactStateless { replace(containerViewId, fragmentInstance, "TAG") } 
    Intereting Posts
    Kotlin Kmongo вставить и вернуть вставленный элемент Kotlin Получить оценку JSON Определите, является ли экземпляр экземпляром класса данных Не удается написать основной конструктор класса Activity в Kotlin в Android Попытка исключить поле при сохранении класса данных kotlin в качестве документа в Google Cloud Firestore Как извлечь kotlin-react html в метод Как вызвать LivePagedListProvider с аргументом в базе данных комнаты Доступ к TextView в пользовательском классе в Котлине Генератор последовательности как вызов функции расширения не работает с «несоответствием типа приемника», RxJava2 наблюдаемый не обрабатывается вNext при изменении Тестирование модулей плагина Intellij IDEA (зависимости от проекта) Есть ли способ сделать ящик с тремя состояниями? kotlin.TypeCastException: null не может быть применено к ненулевому типу com.midsizemango.databasekotlin.Note Весенняя ботинок Kotlin Jersey ModelValidationException Как реализовать шаблон проектирования шаблонов в Котлине?