如何在Kotlin中设置默认的BottomNavigationView选项卡?

我一直在尝试使用广泛接受的java方法在我的onCreate(bottomNavigationView.setSelectedItemId(R.id.item_id))中设置我的默认选择选项卡,但这似乎不适用于Kotlin。 此外,每次选择菜单项时,加载到每个选定项上的片段似乎都会加载,并且在上一个片段中绘制它们的内容。

我怎样才能为我的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) } } 

通过将下面的代码添加到我的onCreate函数解决了默认的选项卡问题:

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

另外,我通过修改以下内容来解决碎片问题:

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

我将ft.add改为ft.replace