¿Cómo cargar el fragment en BottomNavigationView dependiendo del elemento seleccionado?

Tengo una aplicación simple escrita en Kotlin que tiene un BottomNavigationView. La idea es tener una sola actividad (MainActivity) con un fragment que se cargará para cada pestaña en BottomNavigationView.

Ya he creado un fragment que me gustaría cargar cuando se selecciona una pestaña (HomeFragment) y ya estoy cambiando el text debajo de los íconos en BottomNavigationView cuando la pestaña activa cambia.

Ahora me gustaría inflar / cargar el fragment cuando cambio las tabs. ¿Cómo voy a hacer esto?

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 } } 

En lugar de message.setText(R.string.title_enrollments) do

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

O puede usar una function de extensión que uso en mi código para hacerlo más limpio. Solo agrega esto en algún file .kt

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

y ahora puedes agregar eliminar fragment de esta manera:

 supportFragmentManager.transactStateless { replace(containerViewId, fragmentInstance, "TAG") } 
  • Métodos sobrecargados que reciben funciones de order superior en Kotlin
  • Carpeta de salida del comstackdor de Kotlin en Eclipse
  • JSON a HashMap con objects usando Gson
  • El valor de retorno de las funciones de Kotlin se guarda en firebase
  • Kotlin: Lista modificable (inmutable) a través del reparto, ¿es legítimo?
  • ¿Cómo combinar la list dentro de una list de un tipo, en una sola list inmutable?
  • Instanciación de una matriz genérica en Kotlin
  • Cómo implementar Memento Pattern en Kotlin
  • Clase abstracta de Kotlin con param genérico y methods que usan param de tipo
  • No se puede inicializar el analizador de objects para el model. Productos, no se encontraron constructores aceptables
  • NotificationManager.setInterruptionFilter no funciona para ciertos teléfonos