如何将片段目标绑定到底部导航栏中的菜单项?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将片段目标绑定到底部导航栏中的菜单项?相关的知识,希望对你有一定的参考价值。
我想在android中使用导航和目标系统,因此,当单击底部导航栏中的菜单项时,它会变成一个片段。
我创建了3个空片段,并按照本指南将这些项目绑定到这些片段,但是当我单击菜单项时,什么也没有发生。https://developer.android.com/guide/navigation/navigation-ui
我确保菜单中的项目ID与片段也具有相同的ID。我该如何进行这项工作?
这是我的活动:
class MainActivity : AppCompatActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navController = findNavController(R.id.nav_host_fragment)
bottom_navigation
.setupWithNavController(navController)
override fun onOptionsItemSelected(item: MenuItem): Boolean
val navController = findNavController(R.id.nav_host_fragment)
return item.onNavDestinationSelected(navController) || super.onOptionsItemSelected(item)
这是活动xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/coordinator"
tools:context=".MainActivity">
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/navigation" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="@color/colorPrimary"
app:itemIconTint="@color/colorPrimaryDark"
app:itemTextColor="@color/colorPrimaryDark"
app:menu="@menu/bottom_navigation_menu" />
这是底部导航栏菜单:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/fragment_home"
android:icon="@drawable/ic_home_24px"
android:title="Home" />
<item
android:id="@+id/nav_search"
android:icon="@drawable/ic_search_24px"
android:title="Search" />
<item
android:id="@+id/nav_profile"
android:icon="@drawable/ic_face_24px"
android:title="Profile" />
Navigation.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/navigation"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.puntogris.herewego.home.HomeFragment"
android:label="fragment_home"
tools:layout="@layout/fragment_home" >
<action
android:id="@+id/action_homeFragment_to_profileFragment"
app:destination="@id/profileFragment" />
</fragment>
<fragment
android:id="@+id/profileFragment"
android:name="com.puntogris.herewego.profile.ProfileFragment"
android:label="fragment_profile"
tools:layout="@layout/fragment_profile" >
<action
android:id="@+id/action_profileFragment_to_searchFragment"
app:destination="@id/searchFragment" />
</fragment>
<fragment
android:id="@+id/searchFragment"
android:name="com.puntogris.herewego.search.SearchFragment"
android:label="fragment_search"
tools:layout="@layout/fragment_search" />
答案
您的android:id
不匹配。
您的菜单XML使用android:id="@+id/fragment_home"
,但是您的导航XML使用android:id="@+id/homeFragment"
。
这些名称必须相同。例如,您可以将菜单XML更改为
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/homeFragment"
android:icon="@drawable/ic_home_24px"
android:title="Home" />
<item
android:id="@+id/searchFragment"
android:icon="@drawable/ic_search_24px"
android:title="Search" />
<item
android:id="@+id/profileFragment"
android:icon="@drawable/ic_face_24px"
android:title="Profile" />
</menu>
以上是关于如何将片段目标绑定到底部导航栏中的菜单项?的主要内容,如果未能解决你的问题,请参考以下文章