我一直在尝试在 onCreate (bottomNavigationView.setSelectedItemId(R.id.item_id)) 中使用广泛接受的 java 方法来设置默认选择的选项卡,但这似乎在 Kotlin 中不起作用。此外,设置为在每个选定项上加载的 fragment 似乎在每次选择该菜单项时都会加载,并将其内容绘制在前一个 fragment 上。
如何设置 BottomNavigationView 的默认选定选项卡?我是否正确加载了 fragment ,或者我的代码在加载另一个 fragment 之前没有正确处理 fragment ?
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)
}
}
最佳答案
通过将以下代码添加到我的 onCreate 函数中解决了默认选择的选项卡问题:
val bottomNavigationView: BottomNavigationView = findViewById(R.id.navigation) as BottomNavigationView
bottomNavigationView.selectedItemId = R.id.navigation_home
此外,我通过修改以下内容解决了 fragment 相互重叠绘制的问题:
if (frag != null) {
val ft = supportFragmentManager.beginTransaction()
ft.replace(R.id.content, frag, frag.tag)
ft.commit()
}
}
我将 ft.add
更改为 ft.replace
关于android - 如何在 Kotlin 中设置默认的 BottomNavigationView 选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45686090/