单击项目时底部导航不导航

Bottom navigation doesn't navigate when item is clicked

我有一个包含 3 个项目的底部导航菜单:主页、收藏夹和设置。我正在使用片段容器:

<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() 语句中未检查片段布局的 ID。如果我在 onCreate() 函数的第一行中传递了与 BeerListFragment() 不同的参数,它会起作用,所以我认为 setOnNavigationItemSelectedListener.

应该有问题

有没有其他方法可以导航到特定片段?我试过在 navigation_graph 中使用操作,但我认为没有必要,因为我有一个底部导航菜单。

如果您使用导航组件,为什么要使用 childFragmentManager.beginTransaction().replace(R.id.fragment_container, BeerListFragment()).commit()

如果您使用导航组件并且希望您的 BottomNavigationView 项目重定向到您的 fragment 您不需要任何代码,除了在您的 BottomNavigationView 项目中提供正确的 ID ] 菜单。

这里有一个快速 tutorial 可以帮助你。