如何将片段目标绑定到底部导航栏中的菜单项?

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>

以上是关于如何将片段目标绑定到底部导航栏中的菜单项?的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 导航栏中的中心菜单项

将数据从活动传递到底部导航栏的片段

如何将地图活动添加到底部导航?

请问如何设置bootstrap导航栏中的菜单项居中均匀分布?谢谢

如何将菜单动态添加到底部导航视图?

如果在底部导航栏中选择了其他项目,如何删除 floatingActionButton 替换片段