问题描述
请不要将此问题标记为“重复”,我知道此站点中有很多类似问题。
我已经MainActivity.kt
到setNavigationItemSelectedListener()
并将this
作为NavigationView
标记的最后一个孩子时,我的DrawerLayout
上的onNavigationItemSelected()未被调用。我不明白了,为什么会出现这个问题。
您可以在下面查看我的代码
MainActivity.kt
package com.example.googlelike
import android.os.Bundle
import android.util.Log
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.drawerlayout.widget.DrawerLayout
import androidx.navigation.findNavController
import androidx.navigation.ui.NavigationUI
import com.example.googlelike.databinding.ActivityMainBinding
import com.google.android.material.navigation.NavigationView
class MainActivity : AppCompatActivity(),NavigationView.OnNavigationItemSelectedListener {
lateinit var binding: ActivityMainBinding
lateinit var drawerLayout: DrawerLayout
lateinit var navigationView: NavigationView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
drawerLayout = binding.drawerLayout
navigationView = binding.navView
navigationView.setNavigationItemSelectedListener(this)
val navController = this.findNavController(R.id.nav_host_fragment)
NavigationUI.setupActionBarWithNavController(this,navController,drawerLayout)
NavigationUI.setupWithNavController(navigationView,navController)
}
override fun onSupportNavigateUp(): Boolean {
val navController = this.findNavController(R.id.nav_host_fragment)
return NavigationUI.navigateUp(navController,drawerLayout)
}
override fun onNavigationItemSelected(p0: MenuItem): Boolean {
Log.i("MainActivity","Item CLICKED")
return true
}
}
activity_main.xml
<?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">
<data>
</data>
<androidx.drawerlayout.widget.DrawerLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer_layout">
<com.google.android.material.navigation.NavigationView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/nav_view"
app:headerLayout="@layout/nav_header"
app:menu="@menu/navdrawer_menu"
android:layout_gravity="start"/>
</androidx.drawerlayout.widget.DrawerLayout>
</layout>
解决方法
如果您想使用按钮来打开活动或想要做其他事情,则只需做一件事 在导航菜单项中将其写为
<item
android:Onclick=any function you can name of your choice/i am taking it as "open profile"
android:icon="icon"
android:tile="title"></item>
和主要活动中。kt
class MainActivity : AppCompatActivity(){
lateinit var drawerLayout: DrawerLayout
lateinit var navigationView: NavigationView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
...
}
//let my activity name be profile
fun "open profile"(menu item: Menu item){
val intent = Intent(this,profile::class.java)
startActivity(intent)
}
希望它对您有帮助,如果您想要任何进一步的信息,那么请让我知道,我可以为您提供帮助,而不是使用那种长方法,这种方法更加简单有效,并且如果您的导航是底部导航菜单并且想要切换然后让我知道我知道一个非常简单的方法。