单击项目时底部导航不导航
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 可以帮助你。
我有一个包含 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 可以帮助你。