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

时间:2020-03-24 18:06:13

标签: android navigation bottomnavigationview

我有一个包含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。如果我在BeerListFragment()函数的第一行中传递的内容与onCreate()不同,那么它可以正常工作,因此我认为setOnNavigationItemSelectedListener应该存在问题。

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

1 个答案:

答案 0 :(得分:0)

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

如果您使用导航组件,并且希望将BottomNavigationView项重定向到fragment,则无需任何代码,只需要在BottomNavigationView菜单项中提供正确的ID即可

这里tutorial可以帮助您。