¿Cómo establecer la pestaña BottomNavigationView pnetworkingeterminada en Kotlin?

He estado intentando establecer mi pestaña seleccionada por defecto utilizando el método java ampliamente aceptado en mi onCreate (bottomNavigationView.setSelectedItemId (R.id.item_id)), pero esto no parece funcionar en Kotlin. Además, los fragments que se configuran para cargarse en cada elemento seleccionado parecen cargarse cada vez que se selecciona ese elemento del menu, así como dibujar su contenido sobre el fragment anterior.

¿Cómo puedo configurar la pestaña pnetworkingeterminada seleccionada para mi BottomNavigationView? ¿También estoy cargando fragments correctamente o mi código no está eliminando correctamente los fragments antes de cargar otro?

MainActivity.kt

class MainActivity : AppCompatActivity() { private val SELECTED_ITEM = "arg_selected_item" private var mBottomNav: BottomNavigationView? = null private var mSelectedItem: Int = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mBottomNav = findViewById(R.id.navigation) as BottomNavigationView mBottomNav!!.setOnNavigationItemSelectedListener { item -> selectFragment(item) true } val selectedItem: MenuItem if (savedInstanceState != null) { mSelectedItem = savedInstanceState.getInt(SELECTED_ITEM, 0) selectedItem = mBottomNav!!.menu.findItem(mSelectedItem) } else { selectedItem = mBottomNav!!.menu.getItem(0) } selectFragment(selectedItem) } override fun onSaveInstanceState(outState: Bundle) { outState.putInt(SELECTED_ITEM, mSelectedItem) super.onSaveInstanceState(outState) } override fun onBackPressed() { val homeItem = mBottomNav!!.menu.getItem(0) if (mSelectedItem != homeItem.itemId) { // select home item selectFragment(homeItem) } else { super.onBackPressed() } } private fun selectFragment(item: MenuItem) { var frag: Fragment? = null // init corresponding fragment when (item.itemId) { R.id.navigation_enrollments -> frag = EnrollmentsFragment.newInstance() R.id.navigation_timeline -> frag = TimelineFragment.newInstance() R.id.navigation_home -> frag = HomeFragment.newInstance() R.id.navigation_alerts -> frag = AlertsFragment.newInstance() R.id.navigation_profile -> frag = ProfileFragment.newInstance() } // update selected item mSelectedItem = item.itemId // uncheck the other items. for (i in 0..mBottomNav!!.menu.size() - 1) { val menuItem = mBottomNav!!.menu.getItem(i) menuItem.isChecked = menuItem.itemId == item.itemId } updateToolbarText(item.title) if (frag != null) { val ft = supportFragmentManager.beginTransaction() ft.add(R.id.content, frag, frag.tag) ft.commit() } } private fun updateToolbarText(text: CharSequence) { val actionBar = supportActionBar if (actionBar != null) { actionBar.title = text } } private fun getColorFromRes(@ColorRes resId: Int): Int { return ContextCompat.getColor(this, resId) } } 

Se resolvió el problema pnetworkingeterminado de la pestaña seleccionada al agregar el siguiente código a mi function onCreate:

  val bottomNavigationView: BottomNavigationView = findViewById(R.id.navigation) as BottomNavigationView bottomNavigationView.selectedItemId = R.id.navigation_home 

Además, resolví el problema de los fragments que se dibujan uno encima de otro modificando lo siguiente:

 if (frag != null) { val ft = supportFragmentManager.beginTransaction() ft.replace(R.id.content, frag, frag.tag) ft.commit() } } 

Cambié ft.add a ft.replace

  • No se puede acceder a val en Kotlin
  • Usar Kotlin en un module de biblioteca sin usarlo en el module de la aplicación
  • Kotlin build no puede get classs creadas por SquidDatabase
  • Koltin MyClass.class.java Referencia no resuelta: java
  • Referencia no resuelta a la function en Kotlin Android
  • Parse 2D Array en Kotlin
  • No se pueden agregar los fragments usando la function de Extensión de Kotlin
  • Smartcasting hacia y desde el tipo de plataforma en kotlin