У меня есть нижнее меню навигации с 3 пунктами: Домой, Избранное и Настройки. Я использую контейнер Fragment:
<FrameLayout android:id="@+id/fragment_container" />
<com.google.android.material.bottomnavigation.BottomNavigationView app:menu="@menu/bottom_navigation_menu" />
В BaseFragment, где я хочу фактически перемещаться, я использую setOnNavigationItemSelectedListener
, где я переопределяю функцию onNavigationItemSelected(item: MenuItem)
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
childFragmentManager.beginTransaction().replace(R.id.fragment_container, BeerListFragment())
.commit()
val bottomNavigationView: BottomNavigationView? = view?.findViewById(R.id.bottom_navigation)
bottomNavigationView?.setOnNavigationItemSelectedListener(object :
BottomNavigationView.OnNavigationItemSelectedListener {
override fun onNavigationItemSelected(item: MenuItem): Boolean {
var activeFragment: Fragment = BeerListFragment()
when (item.itemId) {
R.id.nav_home -> let {
activeFragment = BeerListFragment()
return true
}
// similiar for the other two options
}
childFragmentManager.beginTransaction()
.replace(R.id.fragment_container, activeFragment).commit()
return true
}
})
Кажется, проблема в том, что идентификаторы раскладок для фрагментов не проверяются в операторе when()
. Если я передаю значение, отличное от BeerListFragment()
, в первой строке функции onCreate()
, это работает, поэтому я думаю, что должна быть проблема с setOnNavigationItemSelectedListener
.
. Есть ли другой способ, которым я могу перейти к конкретному фрагменту? Я пытался использовать действия в navigation_graph, но я не думаю, что это необходимо, потому что у меня есть нижнее меню навигации.