1
我一直在尝试使用广泛接受的java方法在我的onCreate(bottomNavigationView.setSelectedItemId(R.id.item_id))中设置我的默认选定选项卡,但这似乎不适用于Kotlin。另外,每次选择菜单项时,加载到每个选定项上的片段似乎都会加载,并且会在前一个片段上绘制它们的内容。如何在Kotlin中设置默认的BottomNavigationView选项卡?
如何设置我的BottomNavigationView的默认选定选项卡?另外我正确地加载片段或是我的代码没有正确处理碎片之前加载另一个?
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)
}
}