Нижняя навигация не перемещается при нажатии на элемент - PullRequest
1 голос
/ 24 марта 2020

У меня есть нижнее меню навигации с 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, но я не думаю, что это необходимо, потому что у меня есть нижнее меню навигации.

1 Ответ

0 голосов
/ 25 марта 2020

если вы используете навигационный компонент, почему вы используете childFragmentManager.beginTransaction().replace(R.id.fragment_container, BeerListFragment()).commit()?

Если вы используете навигационный компонент и хотите, чтобы ваш элемент BottomNavigationView перенаправлял на ваш fragment, вам не нужно ничего код, кроме указания правильных идентификаторов в пункте меню BottomNavigationView.

Вот краткое руководство , которое поможет вам.

...