¿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?
- ¿Cómo hacer inferencia tipo Kotlin desde la reflexión KClass?
- ¿Qué es la configuration de generateStubs en Kotlin?
- Parse 2D Array en Kotlin
- kotlin-android null no se puede convertir a tipo no nulo kotlin.String
- Configuración de oyentes de Android en Kotlin: uso del retorno en lambdas
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) } }
- Cualquier mejora de código en agregar / replace fragment
- Cómo acceder a una vista desde el layout especificado en headerLayout de NavigationView usando Kotlin en Android
- Smartcasting hacia y desde el tipo de plataforma en kotlin
- Referencia no resuelta a la function en Kotlin Android
- Texto parpadeando en Android, con Kotlin más conciso
- Koltin MyClass.class.java Referencia no resuelta: java
- No se puede acceder a val en Kotlin
- Error "reference no resuelta" en Android Kotlin
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
- Lista vista: desplazamiento suave hacia abajo
- Obteniendo un NoClassDefFoundError al llamar a una function de extensión kotlin