¿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

  • Usar Kotlin en un module de biblioteca sin usarlo en el module de la aplicación
  • ¿Por qué una reference no resuelta al intentar acceder a valores constantes?
  • Android Kotlin .visibilidad
  • No se pueden agregar los fragments usando la function de Extensión de Kotlin
  • Configuración de oyentes de Android en Kotlin: uso del retorno en lambdas
  • Cómo acceder a una vista desde el layout especificado en headerLayout de NavigationView usando Kotlin en Android
  • ¿Cómo hacer inferencia tipo Kotlin desde la reflexión KClass?
  • Kotlin build no puede get classs creadas por SquidDatabase