2017-08-15 164 views
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) 
    } 
} 

回答

0

解决通过添加以下代码到我的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.addft.replace

相关问题