如何根据选定的项目加载BottomNavigationView片段?

我有一个简单的应用程序写在Kotlin有一个BottomNavigationView。 这个想法是有一个单一的活动(MainActivity)与BottomNavigationView的每个选项卡加载片段。

我已经创建了一个片段,当选择一个选项卡(HomeFragment)时,我想加载一个片段,并且当活动选项卡更改时,已经在BottomNavigationView的图标下更改了文本。

现在我想在改变标签时膨胀/加载片段。 我怎么去做这个?

MainActivity.kt:

class MainActivity : AppCompatActivity() { private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item -> when (item.itemId) { R.id.navigation_enrollments -> { message.setText(R.string.title_enrollments) return@OnNavigationItemSelectedListener true } R.id.navigation_timeline -> { message.setText(R.string.title_timeline) return@OnNavigationItemSelectedListener true } R.id.navigation_home -> { message.setText(R.string.title_home) return@OnNavigationItemSelectedListener true } R.id.navigation_alerts -> { message.setText(R.string.title_alerts) return@OnNavigationItemSelectedListener true } R.id.navigation_profile -> { message.setText(R.string.title_profile) return@OnNavigationItemSelectedListener true } } false } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) } override fun onResume() { super.onResume() setContentView(R.layout.activity_main) val bottomNavigationView = findViewById(R.id.navigation) bottomNavigationView.selectedItemId = R.id.navigation_home } } 

而不是message.setText(R.string.title_enrollments)

 supportFragmentManager.beginTransaction() .replace(containerViewId, fragmentInstance, "TAG") .commitAllowingStateLoss() 

或者,您可以使用我在代码中使用的扩展function,使其更清洁。 只要在一些.kt文件中添加这个

 inline fun FragmentManager.transactStateless(func: FragmentTransaction.() -> Unit) { val transaction = beginTransaction() transaction.func() transaction.commitAllowingStateLoss() } 

现在你可以这样添加删除片段:

 supportFragmentManager.transactStateless { replace(containerViewId, fragmentInstance, "TAG") }