我不知道为什么我的navigationview点击事件不能与导航视图一起使用

问题描述

我无法在此代码中为Navigationview设置onclicklistener菜单正在工作,但导航视图中的菜单项却无法正常工作,我也尝试了选择的选项项和navigationitemselected侦听器,但其不起作用,但我已在菜单项中设置了id导航图中的ID相同,但不起作用

 package com.nads.epicureapp

 import android.content.Context
 import android.content.res.Configuration
 import androidx.appcompat.app.AppCompatActivity
 import android.os.Bundle
 import android.util.Log
 import android.view.Menu
 import android.view.MenuItem
 import androidx.appcompat.widget.Toolbar
import androidx.drawerlayout.widget.DrawerLayout
import androidx.navigation.NavController
import androidx.navigation.findNavController
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.*
import androidx.navigation.ui.NavigationUI.onNavDestinationSelected
import androidx.navigation.ui.NavigationUI.setupWithNavController

import com.google.android.material.navigation.NavigationView
import com.nads.epicureapp.databinding.ActivityMainBinding
import dagger.hilt.android.AndroidEntryPoint
import androidx.navigation.ui.navigateUp
import com.google.android.material.bottomnavigation.BottomNavigationView

@AndroidEntryPoint
class MainActivity : AppCompatActivity(),NavigationView.OnNavigationItemSelectedListener{




private lateinit var appBarConfiguration : AppBarConfiguration
private lateinit var navController:NavController
private lateinit var  binding: ActivityMainBinding
private lateinit var toolbar:Toolbar
private lateinit var navHostFragment: NavHostFragment
private lateinit var drawerLayout:DrawerLayout
private lateinit var navView:NavigationView
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)
    toolbar = binding.root!!.findViewById<Toolbar>(R.id.toolbar)
    setSupportActionBar(toolbar)
    navHostFragment =
        supportFragmentManager.findFragmentById(R.id.fragmentactivatedformain) as NavHostFragment

    navController = navHostFragment.navController
    drawerLayout = binding.root!!.findViewById(R.id.drawer_layout)
    navView = binding.root!!.findViewById<NavigationView>(R.id.nav_view)
    appBarConfiguration = AppBarConfiguration(setOf(R.id.homeFragment,R.id.profilePage,R.id.settings_dest),drawerLayout)
    navView.setupWithNavController(navController)
    navView.setNavigationItemSelectedListener(this)
    NavigationUI.setupActionBarWithNavController(this,navController,appBarConfiguration)


}






override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.navigation,menu)
    return true
}





override fun onSupportNavigateUp(): Boolean {
    val navHostFragment =
        supportFragmentManager.findFragmentById(R.id.fragmentactivatedformain) as NavHostFragment
    val navController = navHostFragment.navController
    return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}




override fun onOptionsItemSelected(item: MenuItem): Boolean {

    when(item.itemId){
        R.id.profilePage-> {
            Log.e("NAV","nav selected working")
            binding.root.findNavController().navigate(R.id.profilePage)
            return true
        }
        else->
        {
            return item.onNavDestinationSelected(navController) || super.onOptionsItemSelected(item)

    }
    }

  // return item.onNavDestinationSelected(navController) ||  super.onOptionsItemSelected(item)

   }

override fun onNavigationItemSelected(item: MenuItem): Boolean {
    Log.e("NAV","nav selected working2")
    return true
}
}

这是我的活动主页的布局文件

 <?xml version="1.0" encoding="utf-8"?>
<layout 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">
<androidx.drawerlayout.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start"
tools:context="com.nads.epicureapp.MainActivity">
<com.google.android.material.navigation.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="@+id/linearLayout"
    app:layout_constraintTop_toTopOf="parent"
    app:headerLayout="@layout/nav_header_menu"
    app:menu="@menu/nav_drawer_menu" />
<LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:elevation="4dp"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
        app:popupTheme="@style/AppTheme.PopupOverlay" />
    <fragment
        android:id="@+id/fragmentactivatedformain"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="16dp"
        app:defaultNavHost="true"
        app:navGraph="@navigation/userprimary_navigation" />
     </LinearLayout>
 </androidx.drawerlayout.widget.DrawerLayout>
  </layout>

这是我用于navigationview抽屉式布局的菜单项,其中个人资料页面ID与我的导航图中的ID相同

   <?xml version="1.0" encoding="utf-8"?>
  <menu xmlns:android="http://schemas.android.com/apk/res/android">
   <group android:id="@+id/primary">
    <item
        android:id="@+id/profilePage"
        android:icon="@drawable/profileicon"
        android:title="@string/userprofile" />
  </group>
   <item
    android:id="@+id/settings_dest"
    android:icon="@drawable/ic_app_settings"
    android:title="@string/settings" />

   </menu>

这是我的导航图,我用于导航到此导航图中的个人资料页面

 <?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/userprimary_navigation"
app:startDestination="@id/homeFragment">


<fragment
    android:id="@+id/homeFragment"
    android:name="com.nads.epicureapp.ui.homepage.HomeFragment"
    android:label="Epicure App"
    tools:layout="@layout/fragment_home" >
    <action
        android:id="@+id/action_homeFragment_to_searchFoods"
        app:destination="@id/searchFoods" />
    <action
        android:id="@+id/action_homeFragment_to_searchCooks"
        app:destination="@id/searchCooks" />
   </fragment>
   <fragment
    android:id="@+id/cooksPage"
    android:name="com.nads.epicureapp.ui.homepage.CooksPage"
    android:label="Cooks Page"
    tools:layout="@layout/fragment_cooks_page" />
    <fragment
    android:id="@+id/searchFoods"
    android:name="com.nads.epicureapp.ui.homepage.SearchFoods"
    android:label="Serch foods"
    tools:layout="@layout/fragment_search_foods" >
    <action
        android:id="@+id/action_searchFoods_to_foodDetails"
        app:destination="@id/foodDetails" />
   </fragment>
   <fragment
    android:id="@+id/searchCooks"
    android:name="com.nads.epicureapp.ui.homepage.SearchCooks"
    android:label="Serch Cooks"
    tools:layout="@layout/fragment_search_cooks" >
    <action
        android:id="@+id/action_searchCooks_to_cooksPage"
        app:destination="@id/cooksPage" />
    </fragment>
    <fragment
    android:id="@+id/addRecipes"
    android:name="com.nads.epicureapp.ui.homepage.AddRecipes"
    android:label="Add Recipes"
    tools:layout="@layout/fragment_add_recipes" />
    <fragment
    android:id="@+id/settings_dest"
    android:name="com.nads.epicureapp.ui.homepage.Settings"
    android:label="Settings"
    tools:layout="@layout/fragment_settings" />
    <fragment
    android:id="@+id/foodDetails"
    android:name="com.nads.epicureapp.ui.homepage.FoodDetails"
    android:label="fragment_food_details"
    tools:layout="@layout/fragment_food_details" />
    <fragment
    android:id="@+id/profilePage"
    android:name="com.nads.epicureapp.ui.homepage.ProfilePage"
    android:label="fragment_profile_page"
    tools:layout="@layout/fragment_profile_page" />
    </navigation>

解决方法

您需要在 onNavigationItemSelected 中添加何时,如下所示

override fun onNavigationItemSelected(item: MenuItem): Boolean {
 when(item.itemId){
    R.id.youritemid-> {
        Log.e("NAV","nav selected working")
        return true
    }
    return true
}
,

我在这里得到了一个问题,那就是我们应该将导航视图放在线性布局组件之后的抽屉布局内部,所有内容视图都放在抽屉布局的末尾

<?xml version="1.0" encoding="utf-8"?>
<layout 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">
 <androidx.drawerlayout.widget.DrawerLayout
  android:id="@+id/drawer_layout"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start"
tools:context="com.nads.epicureapp.MainActivity">
 <LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:elevation="4dp"
    android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
    app:popupTheme="@style/AppTheme.PopupOverlay" />
<fragment
    android:id="@+id/fragmentactivatedformain"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="16dp"
    app:defaultNavHost="true"
    app:navGraph="@navigation/userprimary_navigation" />
 </LinearLayout>
 <com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@+id/linearLayout"
app:layout_constraintTop_toTopOf="parent"
app:headerLayout="@layout/nav_header_menu"
app:menu="@menu/nav_drawer_menu" />
</androidx.drawerlayout.widget.DrawerLayout>
</layout>
  

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...